对于这种情况,我将singleTask
在manifest.xml或Activity的onResume()
&onDestroy()
方法中的一个标志中分别采用两种方法之一。
对于第一个解决方案:我更喜欢将其singleTask
用于清单中的活动,而不是singleInstance
,按照singleInstance
我的使用,我发现在某些情况下,该活动会为其自身创建一个新的单独实例,从而在运行的应用程序中具有两个单独的应用程序窗口在bcakground中,除了额外的内存分配外,当用户打开应用程序视图以选择一些要恢复的应用程序时,这将导致非常糟糕的用户体验。因此,更好的方法是在manifest.xml中定义活动,如下所示:
<activity
android:name=".MainActivity"
android:launchMode="singleTask"</activity>
您可以在此处检查活动启动模式。
对于第二种解决方案,您只需定义静态变量或首选项变量,例如:
public class MainActivity extends Activity{
public static boolean isRunning = false;
@Override
public void onResume() {
super.onResume();
// now the activity is running
isRunning = true;
}
@Override
public void onDestroy() {
super.onDestroy();
// now the activity will be available again
isRunning = false;
}
}
然后从另一端启动此活动时,只需检查:
private void launchMainActivity(){
if(MainActivity.isRunning)
return;
Intent intent = new Intent(ThisActivity.this, MainActivity.class);
startActivity(intent);
}