Activity A启动Activity B,在B中按Home回到主屏幕,按menu时呈现后台app任务列表,如何让刚退出的app的界面显示为A,而不是退出时的B
2014-03-04 22:27
666 查看
先把实现方法说在最前:
要实现这个功能,最快捷方法就是在配置文件AndroidManifest.xml中,在Activity A添加一句
最初我是往Activity的生命周期方面想的,因为在B中按Home回到主屏幕,就会调用Activity B的生命周期中的onPause()和onStop()方法,这时B还没destroy,如果在进app的话会依次调用B的onRestart(),onStart(),onResume()方法
因此我一开始是重写B的onRestart()方法,当调用它时就会跳到Activity A,这样就达到效果。
一开始是成功的,按Home退出后再进能回到A,但是仔细测试后发现在A按Back键不能一次性退出程序。后来试过一些方法,重写过BACK返回键都不能完整退出,会出现在A按BACK后,还是回到A
再后来,发现每次在B按HOME后再进app,就要多按BACK退出一次。例如启动程序后,A启动B,B按HOME,再进app,再启动B,再按HOME,再进app……以上步骤重复N次后,最后再A想要退出的话,要按N次BACK键才能退出应用,代码如下
这是Activity A,也是程序入口
后来查了下,发现一篇介绍launchMode的:http://blog.csdn.net/liuhe688/article/details/6754323
看了后明白问题出在哪里,就像那篇文章所说的,默认是standard,不停退出再进,就会不停产生新的Activity A实例,也就是不停将新的Activity A压入栈内
解决方法就是使用singleTask,把Activity A之上的通通出栈,这样栈顶就是Activity A了,也就达到效果,也不需要重写onRestart方法
AndroidManifest代码:
要实现这个功能,最快捷方法就是在配置文件AndroidManifest.xml中,在Activity A添加一句
android:launchMode="singleTask"
最初我是往Activity的生命周期方面想的,因为在B中按Home回到主屏幕,就会调用Activity B的生命周期中的onPause()和onStop()方法,这时B还没destroy,如果在进app的话会依次调用B的onRestart(),onStart(),onResume()方法
因此我一开始是重写B的onRestart()方法,当调用它时就会跳到Activity A,这样就达到效果。
一开始是成功的,按Home退出后再进能回到A,但是仔细测试后发现在A按Back键不能一次性退出程序。后来试过一些方法,重写过BACK返回键都不能完整退出,会出现在A按BACK后,还是回到A
再后来,发现每次在B按HOME后再进app,就要多按BACK退出一次。例如启动程序后,A启动B,B按HOME,再进app,再启动B,再按HOME,再进app……以上步骤重复N次后,最后再A想要退出的话,要按N次BACK键才能退出应用,代码如下
这是Activity A,也是程序入口
public class MainActivity extends Activity { private Button b1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); b1 = (Button) findViewById(R.id.Button01); b1.setOnClickListener(new OnClickListener() { public void onClick(View v) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); } }); } }下面是Activity B
public class SecondActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.secondactivity);// } public void onRestart() { System.out.println("second activity: onRestart()"); Intent intent = new Intent(SecondActivity.this, MainActivity.class); startActivity(intent); super.onRestart(); finish();//如果不加finish()会一直退不出程序 } }后来想到了activity栈,是不是每次home键退出再进时就会又压一个activity栈呢?这样就解释了n次home键后要n次back键才退出程序
后来查了下,发现一篇介绍launchMode的:http://blog.csdn.net/liuhe688/article/details/6754323
看了后明白问题出在哪里,就像那篇文章所说的,默认是standard,不停退出再进,就会不停产生新的Activity A实例,也就是不停将新的Activity A压入栈内
解决方法就是使用singleTask,把Activity A之上的通通出栈,这样栈顶就是Activity A了,也就达到效果,也不需要重写onRestart方法
AndroidManifest代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.androidtest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.androidtest.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.androidtest.SecondActivity"></activity>
</application>
</manifest>
相关文章推荐
- 【转】如何使App从后台返回前台时,显示指定界面
- A程序后台启动的B的Activity后,A程序后台又启动了A的Activity,如何在A的Activity中按返回不显示B的Activity
- 6.9 singleinstance启动模式 & app不在最近任务列表中显示
- 如何将同一个APP中的不同activity在Recent(最近任务)中显示?
- unity在android显示界面(UnityPlayerActivity)不重复加载且app退出杀掉所有界面的两种方法
- 如何使App从后台返回前台时,显示指定界面
- Android 点击Home键后再点击APP图标,APP重启而不是回到原来界面
- 如何将同一个APP中的不同activity在Recent(最近任务)中显示?
- 如何使APP从后台返回到前台时显示指定界面
- 如何在android手机上实现app开机自动运行启动(可以打开应用界面)。
- android开发:运行App,显示当前界面是哪个activity。
- 包管理器移除一个activity后,ActivityManager自动启动HOME界面的问题
- dedecms后台每页文章条数如何修改(“文档列表”每一页显示的文档条数)
- 后台的activity被系统自动回收的话,怎么在回到界面的时候恢复数据
- 实现启动一个activity但不显示其界面
- 如何用数据驱动实现通用化巡检APP(如何一个界面里添加多个点击拍照按钮并显示在不同的imageview里)
- 如何避免Docker容器启动脚本运行后自动退出——一个cron定时任务docker镜像方案
- 【Android】如何实现启动APP时引导页、欢迎页功能设置之(二)设置只在第一次启动APP时跳入引导界面
- (2)jBPM websale代码学习: home.jsp(显示任务列表)
- Activity切换出现黑屏或无效果/点home键再进入程序回不到原来Activity/home 键退出程序会有Activity切换/EditText光标不显示