如何在当前运行的应用程序中保留应用程序的单个Android实例
我有一个android应用程序,它有两个活动,比如A和B,其中A是启动器活动。对于活动A,我注册了一个如何在当前运行的应用程序中保留应用程序的单个Android实例,android,guava,android-launcher,Android,Guava,Android Launcher,我有一个android应用程序,它有两个活动,比如A和B,其中A是启动器活动。对于活动A,我注册了一个intent过滤器,它为特定URL打开应用程序。我希望在当前运行的应用程序中始终为我的应用程序设置一个任务。为了解决这个问题,我尝试了launchMode属性的不同组合: AsingleTop,Bstandard但当我通过intent URL访问应用程序时,我在当前运行的应用程序中有两个应用程序 AsingleTaskBstandard但每次我打开应用程序时,它都以活动A开始,即使应用程序已经用
intent过滤器
,它为特定URL打开应用程序。我希望在当前运行的应用程序中始终为我的应用程序设置一个任务。为了解决这个问题,我尝试了launchMode
属性的不同组合:
AsingleTop
,Bstandard
但当我通过intent URL访问应用程序时,我在当前运行的应用程序中有两个应用程序
AsingleTask
Bstandard
但每次我打开应用程序时,它都以活动A开始,即使应用程序已经用活动B打开(在这种情况下,我希望恢复应用程序)
AsingleTask
BsingleTask
AsingleTask
Bstandard
我希望我的应用程序具有相同的行为,例如gmail,在当前运行的应用程序中始终最多有一个实例,当我打开它并且后台已经有一个实例时,恢复它,如果我通过意图过滤器打开应用程序,我希望处理意图并相应地提供内容(例如,gmail在后台,我点击后收到一个新邮件通知,android保留一个gmail实例并显示新邮件)
我使用三星Galaxy Note 4和Android 6.0
问题已解决
我为我的问题找到了一个解决方案,可能不是最好的,但它很有效。首先,我添加了一个新的活动来捕获intent过滤器
,该过滤器具有launchMode=“SingleTask”
,并且在它的onCreate
方法中,我发布了一个事件来杀死所有现有的活动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if ("android.intent.action.VIEW".equals(getIntent().getAction())) {
// This Activity is started using an external app (eg: Gmail)
// So start the app from the beginning
// (redirecting to Activity A)
Intent mainIntent = getIntent(); // Copy the Intent used to launch me
// Launch the real root Activity (launch Intent)
mainIntent.setClass(this, StartActivity.class);
// Post an event to kill all existing activities
// To do this i use Guava
PubSub.getInstance().post(new KillActivityEvent());
startActivity(mainIntent);
finish();
} else {
// The activity wasn't started by an external app
finish();
}
}
你可以使用碎片活动B太大,碎片对我没有帮助。你可以使用碎片活动B太大,碎片对我没有帮助。