大佬教程收集整理的这篇文章主要介绍了android – 如果发生UncaughtExceptionHandler,如何退出(仅)当前活动?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
首先,我以这种方式实现了BaseActivity.
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread paramThread,Throwable paramThrowablE) { Log.e("CRASH_REPORT","Activity crashed!"); System.exit(0); } }); } }
通过扩展BaseActivity,任何未捕获的异常最终都会被处理程序捕获. System.exit(0)将终止属于该应用程序的Vm.
现在,我使用此层次结构创建了2个活动(均扩展了BaseActivity).
在ParentActivity中,我只有一个按钮,点击后会启动subactivity(代码省略).
在subactivity.onCreate(…)中,我故意注入一个异常来触发uncaughtException(…).
public class subactivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); int crash = 1 / 0; } }
执行subactivity时,会触发uncaughtException(…)并停止应用程序(显然没有熟知的app停止对话框).
我想知道的是,是否可以终止触发的Activity(在这种情况下是subactivity),app是否会回滚(排序)到之前的状态(ParentActivity)?
任何建议表示赞赏.谢谢.
在这里,我将列出我对“对策”这个问题的看法.
1.在不同的过程中声明每个活动(不推荐)
在清单文件中,在每个活动标记下添加android:process = deDicated_process_name.这样做会使每个Activity在自己的进程中运行,从而确保1个进程的崩溃不会影响另一个进程.但不建议这样做.
<activity android:name=".ParentActivity" android:process="::parent_process" />
2.强制停止应用程序(System.exit(代码))并提供回调,其中每个Activity都可以定义自己的处理.
使用onCrashed(…)回调创建BaseActivity.
public class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread paramThread,"Activity crashed!"); onCrashed(thread,throwablE); System.exit(0); } }); } protected void onCrashed(Thread thread,Throwable throwablE) { // space for rent } }
从BaseActivity扩展的所有Activity都可以决定他们在崩溃时想要做什么.一个例子是安排再次启动应用程序.
public class subactivity extends BaseActivity @Override protected void onCrashed(Thread thread,Throwable throwablE) { Intent i = new Intent(this,ParentActivity.class); PendingIntent pi = PendingIntent.getActivity(this,i,0); AlarmManager am = (AlarmManager) getSystemservice(Context.ALARM_serviCE); am.set(AlarmManager.RTC,System.currentTimeMillis() + 100,pi); }
或者,我们可以选择在应用程序级别实现uncaughtException(…),Application将决定下一步该做什么. (例如,重启当前活动)
以上是大佬教程为你收集整理的android – 如果发生UncaughtExceptionHandler,如何退出(仅)当前活动?全部内容,希望文章能够帮你解决android – 如果发生UncaughtExceptionHandler,如何退出(仅)当前活动?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。