这是我的问题 -
我将.apk文件复制到手机存储卡上并点击它启动我的应用程序,它允许我安装我的应用程序。我安装了我的应用程序。最后,我弹出系统安装包含两个选项“打开“和”完成“。当我点击”打开“时,我的应用程序已启动。到目前为止,一切正常,没有任何问题。
现在在我的应用程序中,我点击了一个按钮,结果发生了一些下载(显示进度对话框)。现在我按下一个主页按钮,所以我的应用程序转到后台。
现在我再次启动我的应用程序,进入菜单并单击我的应用程序图标。
预期结果 - 我仍然应该看到下载进度对话框。 实际结果 - 我的应用程序的新实例/会话正在开始。
那么如何避免这种情况,以便我的应用程序只能运行一个和一个实例/会话。
答案 0 :(得分:9)
@Palejandro,你在这里。将以下代码放入主要活动 onCreate()
方法:
// Possible work around for market launches. See
// http://code.google.com/p/android/issues/detail?id=2373
// for more details. Essentially, the market launches the main activity
// on top of other activities.
// We never want this to happen. Instead, we check if we are the root
// and if not, we finish.
if (!isTaskRoot()) {
final Intent intent = getIntent();
final String intentAction = intent.getAction();
if (intent.hasCategory(Intent.CATEGORY_LAUNCHER) && intentAction != null && intentAction.equals(Intent.ACTION_MAIN)) {
Log.w(TAG, "Main Activity is not the root. Finishing Main Activity instead of launching.");
finish();
return;
}
}
我在我的项目中使用了这段代码并且工作正常!
答案 1 :(得分:8)
我相信你需要把
<activity
android:launchMode="singleInstance"
</activity>
清单文件中的。
答案 2 :(得分:1)
您的OnPause
,OnResume
和OnCreate
是什么?
我敢打赌,你没有保存任何OnPause,并且一直通过OnCreate开始一个新的实例。
您应该阅读Activity Lifecycles.
上的说明答案 3 :(得分:0)
如果您尚未对此进行排序,我会说您的应用程序实际上是在按下主页时被杀死,或者您可能有一个错误无法锁定任何对象保持状态。
答案 4 :(得分:0)
//在调用super和setcontentview()
之前将代码放在启动器活动中ActivityManager am =(ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
// get the info from the currently running task
List< ActivityManager.RunningTaskInfo > taskInfo = am.getRunningTasks(10);
boolean alreadyTask=false;
for(ActivityManager.RunningTaskInfo info : taskInfo){
ComponentName componentInfo = info.topActivity;
String value= componentInfo.getPackageName();
if(value.contains(getPackageName()) && !info.topActivity.getClassName().contains(getPackageName()+".LauncherActivity")){
alreadyTask=true;
Log.i(TAG, "second instance found!!!");
break;
}
}
if(alreadyTask){
finish();
}
答案 5 :(得分:0)
我没有解决方案,但问题是,与从主屏幕打开相比,从安装中直接打开应用程序时启动应用程序的意图有所不同。由于它将以两个不同的意图开始,它将在第二轮打开一个新实例。
快速解决方法是避免按下&#34;打开&#34;安装应用程序时。按&#34;完成&#34;然后自己找到应用程序。