Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 是否从Thread.UncaughtExceptionHandler启动服务?_Android_Exception_Process_Android Service_Crash Reports - Fatal编程技术网

Android 是否从Thread.UncaughtExceptionHandler启动服务?

Android 是否从Thread.UncaughtExceptionHandler启动服务?,android,exception,process,android-service,crash-reports,Android,Exception,Process,Android Service,Crash Reports,我正在尝试设置一个全局异常处理服务,如中所述。这种方法听起来合乎逻辑,因为崩溃后,自定义中的代码可能无法成功执行,或者是因为应用程序可能未处于稳定状态,或者是因为在进程被操作系统终止之前没有足够的时间 不幸的是,这种方法似乎不起作用,因为服务在同一个进程中启动,所以它也被终止。如何从处理程序的uncaughtException()启动服务?我可以强制服务在完全独立的过程中启动吗 我正在应用程序中设置自定义默认(VM级别)异常处理程序,如下所示: public class MyApp exten

我正在尝试设置一个全局异常处理服务,如中所述。这种方法听起来合乎逻辑,因为崩溃后,自定义中的代码可能无法成功执行,或者是因为应用程序可能未处于稳定状态,或者是因为在进程被操作系统终止之前没有足够的时间

不幸的是,这种方法似乎不起作用,因为服务在同一个进程中启动,所以它也被终止。如何从处理程序的
uncaughtException()
启动服务?我可以强制服务在完全独立的过程中启动吗


我正在
应用程序中设置自定义默认(VM级别)异常处理程序,如下所示:

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);
在我的自定义处理程序中,我启动服务的方式如下:

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

该服务在
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>

先生,你刚刚救了我的命