我的情景是,
当应用程序启动时,用户登录后我将按以下方式启动活动,
Intent rangeFinderScreen = new Intent(YourLocationScreen.this, RangeFinderScreen.class);
rangeFinderScreen.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(rangeFinderScreen);
我正在使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
,以便清除所有先前的活动堆栈并将其作为新任务启动。
然后我有底栏在活动之间导航,所以我做了一个共同的监听器(Activity)并在所有活动中实现了它。它看起来如下,
public class CommonListenerForBottomButtons extends Activity implements View.OnClickListener{
Context context;
String buttonName;
public CommonListenerForBottomButtons(Context context, String buttonName){
this.context = context;
this.buttonName = buttonName;
}
@Override
public void onClick(View v) {
switch(buttonName){
case "play":
Intent rangefinder = new Intent(context, RangeFinderScreen.class);
rangefinder.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(rangefinder);
break;
// and so on more cases
}
}
}
关
如果我第一次开始活动时,我会执行以下操作,
Intent rangeFinderScreen = new Intent(YourLocationScreen.this, RangeFinderScreen.class);
startActivity(rangeFinderScreen);
然后一切正常。
但如果我按照以下方式(就像我现在所做的那样),即使用rangeFinderScreen.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
然后活动再次开始。
但是,如果我从任何其他活动开始活动而不是像
这样的公共监听器活动Intent rangefinder = new Intent(MyGolflerScreen.this, RangeFinderScreen.class);
startActivity(rangefinder);
然后开始。
修改
以下是我在所有活动中初始化Common Listener的方法:
homeLinearLayout.setOnClickListener(new CommonListenerForBottomButtons(getApplicationContext(), "home"));
playLinearLayout.setOnClickListener(new CommonListenerForBottomButtons(getApplicationContext(), "play"));
weatherLinearLayout.setOnClickListener(new CommonListenerForBottomButtons(getApplicationContext(), "weather"));
messageLinearLayout.setOnClickListener(new CommonListenerForBottomButtons(getApplicationContext(), "message"));
myGolflerLinearLayout.setOnClickListener(new CommonListenerForBottomButtons(getApplicationContext(), "mygolfer"));
除了最初以标志Intent.FLAG_ACTIVITY_NEW_TASK
开始的那个活动之外,所有其他活动都会开始。
清单文件条目
<activity
android:name=".RangeFinderScreen"
android:label="@string/title_activity_range_finder_screen"
android:screenOrientation="portrait" >
</activity>
答案 0 :(得分:0)
从应用程序中的其他活动启动活动时,请勿设置标记Intent.FLAG_ACTIVITY_NEW_TASK
。这不是必要的,可能会导致您的问题。
此外,如果您每次用户点击某个按钮时都开始新的Activity
,您会发现每次都会创建这些活动的新实例,并且最终将会有大量的这些活动。一会儿。这可能也不是所希望的行为。要在可能已在任务堆栈中的活动之间切换,您可以设置标记Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
。
答案 1 :(得分:0)
如果您关心的是管理所有堆栈,我更愿意使用所有&#34; singleTop&#34;活动并以旗帜Intent.FLAG_ACTIVITY_CLEAR_TOP
开始
它将管理您想要做的所有事情。
您可以在Manifest内部活动代码中添加launchMode
,该代码等于"singleTop"
。
希望它有效......