4

我正在编写和测试一个 android 应用程序,我需要在多次崩溃时重新启动应用程序。重新启动代码工作正常,但在 2 次崩溃后服务没有重新启动,我在日志中看到以下消息

06-13 02:31:02.098: W/ActivityManager(2117): Service crashed 2 times, stopping: ServiceRecord{42b5b6a0

看起来 AcitivityManager 不允许在 2 次崩溃后重新启动服务。

是否有一些 API 可以让我们将此数字从 2 更改为其他值?

可在此处获得重现此问题的示例应用程序

https://github.com/devendram/servicecrashdemo

此处提供 Logcat 输出

https://gist.github.com/devendram/5c5259d3f91fd8409e7b#file-gistfile1-txt-L1754

4

2 回答 2

0

所以我不能发誓这适用,但它是我在网上找到的“ServiceRecord”的更好例子之一:

删除了指向 hi-android.info 的死链接,该链接现在宣传可疑的投资产品


http://justanapplication.wordpress.com/2012/06/06/dgc_18/

对 ServiceRecord 有一些很好的讨论。从我所看到的情况来看,Android 似乎会跟踪您的服务,并且为了避免出现许多问题,如果服务反复崩溃,则会停止允许该服务启动。我看到的常数与 2 不太匹配,但我怀疑这是问题所在。

你能找到避免崩溃的方法吗?例如,Try-Catch?这是昂贵的,但它会避免崩溃和碰撞......

否则 - 为什么您的服务如此频繁地崩溃?为什么需要?

于 2014-06-12T20:09:28.470 回答
0

在查看了android源代码后,我发现了一个可以解决问题的 ProcessRecord 属性isPersistent()。然后我用 adb 转储了所有包的包信息。结果如下所示:

Package [com.android.phone] (fa7158b):                           
  userId=1001                                                    
  sharedUser=SharedUserSetting{3eab065 android.uid.phone/1001}   
  pkg=Package{4db66c com.android.phone}                          
  codePath=/system/priv-app/TeleService                          
  resourcePath=/system/priv-app/TeleService                      
  legacyNativeLibraryDir=/system/priv-app/TeleService/lib        
  primaryCpuAbi=null                                             
  secondaryCpuAbi=null                                           
  versionCode=29 minSdk=29 targetSdk=29                          
  versionName=10                                                 
  splits=[base]                                                  
  apkSigningVersion=3                                            
  applicationInfo=ApplicationInfo{58dac1b com.android.phone}     
  flags=[ SYSTEM HAS_CODE PERSISTENT ALLOW_CLEAR_USER_DATA ]     

PERSISTENT标志很有趣,我认为它可能设置在 AndroidManifest.xml 中。所以我检查了标签应用所有可用的属性,最后得到了属性android:persistent来解决这个问题。
顺便说一句,我是一名 android 系统服务程序员,他编写使用平台密钥签名的 android 应用程序。我不确定它是否也适用于普通人。

于 2021-02-20T01:54:50.783 回答