是否可以配置Android应用程序,以便如果用户已打开您的应用程序,启动了大量活动,然后返回主屏幕并再次重新启动您的应用程序,而不是进入主要活动,他们将转而采取最高活动在堆栈上(您应用中的最新活动)?
Jos*_*ger 49
当通过图标在主屏幕上推出,Android将始终启动与活动android.intent.action.MAIN过滤器在你的AndroidManifest.xml,除非应用程序已经运行(在这种情况下,它显然会恢复堆栈顶部的活动).
要实现您所描述的内容,您只需将最后一个可见活动存储在其中,SharedPreferences并根据首选项启用Dispatcher活动即可启动上一个活动.
因此,在您想要自动重新启动的每个活动中:
@Override
protected void onPause() {
super.onPause();
SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString("lastActivity", getClass().getName());
editor.commit();
}
Run Code Online (Sandbox Code Playgroud)
以及类似于以下内容的Dispatcher活动:
public class Dispatcher extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Class<?> activityClass;
try {
SharedPreferences prefs = getSharedPreferences("X", MODE_PRIVATE);
activityClass = Class.forName(
prefs.getString("lastActivity", Activity1.class.getName()));
} catch(ClassNotFoundException ex) {
activityClass = Activity1.class;
}
startActivity(new Intent(this, activityClass));
}
}
Run Code Online (Sandbox Code Playgroud)
备注
onPause覆盖创建基类android.intent.action.MAIN行动这是默认行为,这个问题之前已被问过几次:
Android: keep task's Activity stack after restart from HOME
Android Run application from last Activity
请注意,如果您从 Eclipse 启动应用程序,则会破坏此默认功能。更改启动配置以启动任何活动应该可以解决问题。
但是,由于过去几周在 Eclipse 的 ADT 插件0.9.6 版本中修复了此行为,因此您不再需要该解决方法:
现在,从 ADT 启动的应用程序的行为就像从主屏幕单击一样。
它并不复杂.你只需要操纵清单.
AndroidManifest.xm
<activity
android:name=".MainActivity"
android:alwaysRetainTaskState="true"
android:exported="true"
.
.
.
Run Code Online (Sandbox Code Playgroud)
在这里阅读'android:exported'和'android:alwaysRetainTaskState':
| 归档时间: |
|
| 查看次数: |
38460 次 |
| 最近记录: |