Android back键ANR,与onPause,onDestory “延迟执行”的问题研究

本文探讨了Android应用中使用Theme.NoDisplay导致的back键响应ANR问题,以及解决方案可能引发的onPause和onDestroy方法延迟执行的现象。通过对不同场景的分析,如singleInstance模式、moveTaskToBack调用位置,揭示了问题的本质,并提出了解决策略。
摘要由CSDN通过智能技术生成

我前面有篇文章提到 这个问题的现象记录http://blog.csdn.net/luohaowang320/article/details/18088425

1.首先,分析activity back键,响应出现 ANR的问题。

这个问题是由于在manifest的activity中 使用 Theme.NoDisplay,不显示该Activity 导致的。

android:theme="@android:style/Theme.NoDisplay"

测试代码很简单,将一个application的Activity添加上面属性,桌面运行,看不到任何界面,og的日志可以,看到该onResume已执行,你可以照常进行其他的交互,滑动分页、打开其他的应用,但是不能碰“BACK”键,否则就会出现“ANR”。深层次的原因,暂时还不清楚,有大侠知道,欢迎回复解答下。

2.解决“ANR"bug : 在改Activity的 onCreate中添加

moveTaskToBack(true);

这样,就可以正常响应back键了,但是,会导致另外的问题:onPause onDestroy 延迟执行。

当然,这个moveTaskToBack最好是写在onResume中,不然,再次显示该Activity的时候,还是会出现 ANR的问题。

3.onPause onDestroy 延迟执行分析验证。

情况一:

app A代码清单如下:


public class AMainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.i(getClass().getSimpleName(), "onCreate--taskId=" + getTaskId());

		findViewById(R.id.button1).setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Log.i(getClass().getSimpleName(), "onClick");
				ComponentName componentName = 
						new ComponentName("com.example.testlanchmode2", "com.example.testlanchmode2.BMainActivity");
				//启动 app2 的BActivity
			
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值