qui*_*int 4 android exception process crash-reports android-service
我正在尝试设置一个全局异常处理服务,如本答案中所述.这种方法听起来合乎逻辑,因为在崩溃之后,我的自定义中的代码Thread.UncaughtExceptionHandler可能无法成功执行,因为应用程序可能不处于稳定状态,或者因为可能没有足够的时间在该进程被操作系统杀死之前.
不幸的是,这种方法似乎不起作用,因为服务在同一个过程中启动,所以它也被杀死了.如何从处理程序启动服务uncaughtException()?我可以强制服务在完全独立的过程中启动吗?
我正在设置我的自定义默认(VM级别)异常处理程序,Application如下所示:
public class MyApp extends Application {
@Override
public void onCreate() {
Thread.setDefaultUncaughtExceptionHandler(
MyExceptionReporter.getInstance(this));
...
Run Code Online (Sandbox Code Playgroud)
在我的自定义处理程序中,我正在启动这样的服务:
final Intent i = new Intent(MyExceptionService.INTENT);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.putExtra(MyExceptionService.EXTRA_STACK_TRACE,
Log.getStackTraceString(ex));
mContext.startService(i);
Run Code Online (Sandbox Code Playgroud)
该服务在AndroidMaifest.xml文件中被解析,并从应用程序的其他地方启动.
啊,我想出来了.关键是要添加android:process到清单,这会强制服务在单独的进程中启动.这可以防止服务在应用程序被杀死时被杀死.
<service
android:name="your.package.blah.blah.MyExceptionService"
android:process=":exception" >
<intent-filter>
<action android:name="your.package.blah.blah.REPORT" />
</intent-filter>
</service>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1193 次 |
| 最近记录: |