启动从Thread.UncaughtExceptionHandler服务?(Start a serv

2019-07-04 08:18发布

我试图建立一个全球性的异常处理服务在提到这个答案 。 因为在崩溃后,在我的自定义代码这种做法听起来合乎逻辑Thread.UncaughtExceptionHandler可能无法成功执行,要么是因为应用程序可能无法在一个稳定的状态,或者因为之前的过程是由OS杀死可能没有足够的时间。

不幸的是,这种方法似乎并不工作,因为该服务在同一进程,因此,也被杀害启动。 我怎样才能从处理程序的启动服务uncaughtException() 我可以强制服务在一个完全独立的进程来启动?


我设置我的定制默认(VM级)的异常处理程序在Application是这样的:

public class MyApp extends Application {    
    @Override
    public void onCreate() {
        Thread.setDefaultUncaughtExceptionHandler(
            MyExceptionReporter.getInstance(this));
        ...

在我的自定义处理程序,我推出这样的服务:

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);

该服务在declated AndroidMaifest.xml文件,并在程序的任何地方启动的罚款。

Answer 1:

啊,我想通了这一点。 关键是要增加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>


文章来源: Start a service from Thread.UncaughtExceptionHandler?