2014-06-26 15 views
1

我想在我的小部件中按下按钮时开始我的应用程序\活动。从窗口小部件创建时,如何避免一个活动的多个实例?

我使用这个代码:

Intent launchApp = context.getPackageManager() 


     Intent launchApp = context.getPackageManager() 
       .getLaunchIntentForPackage("com.sexy.code"); 
     launchApp.setData(Uri.parse(listItemClickIntent 
       .toUri(Intent.URI_INTENT_SCHEME))); 
     pIntent = PendingIntent.getActivity(context, 0, launchApp, 
       PendingIntent.FLAG_UPDATE_CURRENT); 

我的问题是在我的应用程序已经是活着的背景,使一切正常,直到我关闭的活动,打开,发现它背后另有一个场景。这就像我需要退出应用程序两次。

我该如何避免这种情况?有关使用发射模式标志

+0

请阅读Android清单启动模式文档的活动 – Sush

+0

@Jesus Dimrix启动模式不是最佳实践 – Boopathi

回答

0

什么:

android:launchMode="singleTask" 

你的活动应该是这样的:

<activity 
      android:name=".YourActivity" 
      android:launchMode="singleTask" 
      android:configChanges="orientation|screenSize" > 
+0

它不是一个最佳实践,而创建片段每个人都有这个问题,原因是savedInstanceState而旋转移动它将再次创建实例并再次,每次你想检查savedInstanceState!= null或不 – Boopathi

1

试试这个:

launchApp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

从文档FLAG_ACTIVITY_CLEAR_TOP

如果已设置,并且正在启动的活动已在当前任务中运行,则不会启动该活动的新实例,而是关闭其上的所有其他活动,并且将交付此Intent作为一个新的意图到(现在在上面)旧的活动。

这个标志还可以与FLAG_ACTIVITY_NEW_TASK相结合,如:

launchApp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
        Intent.FLAG_ACTIVITY_NEW_TASK); 

您也可以单独使用它们,这取决于你想要的行为是什么。

+0

Nickolai Astashonok答案很好,是否有任何理由使用你的方式呢? –

+1

FLAG_ACTIVITY_NEW_TASK与launchMode = singleTask的工作方式相同。这只是一个偏好问题,如果你想用代码或XML来做。 – JDJ

+0

谢谢,很高兴认识这两种方式。 –

相关问题