我也推荐Fragment来满足这个要求,但是由于你的应用程序已经实现了,你可以使用这种方法。
all the activities that exists before it in the stack should be finished.
Android 没有提供任何标志来清除下面的所有Activities,例如使用clearTop 清除顶部Activities。如果我们有clearBottom 会很简单:)
好的。如果您的目标是Android API version from 16,这种方法将以优化的方式提供帮助。对于其他较低版本,您需要分别完成每个Activity。
创建一个BaseActivity,它将所有Activity实例添加到HashMap中(类似于添加Fragments to back Stack)。但这里只是记住堆栈中的Activities。您也可以使用ActivityManager.RunningTaskInfo 检查堆栈中的Activities,但我不想让它变得更复杂。
声明一个静态变量。我更喜欢在我的Application class 中做。
public class MyApp extends Application {
public static HashMap<String , CommonActivity > mBackStackActivities
= new HashMap<String, CommonActivity>();
}
现在,当 Activity created 将其实例添加到 HashMap 时
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyApp.mBackStackActivities.put(getComponentName().getClassName(), this);
}
并且,当Activity destroy删除它
@Override
protected void onDestroy(){
MyApp.mBackStackActivities.remove(getComponentName().getClassName());
super.onDestroy();
}
现在,Override base Activity class 中的 startActivity 方法以及 Activity 启动时check if theActivityexists inHashMap. If existsfinishall the belowActivityusingfinishAffinity`。 >
@Override
public void startActivity(Intent intent) {
if(MyApp.mBackStackActivities
.containsKey(intent.getComponent().getClassName())){
if(android.os.Build.VERSION.SDK_INT >= 16) {
Activity activity = MyApp.mBackStackActivities.get(intent.getComponent().getClassName());
// finish the activity as well as all the below Activities.
activity.finishAffinity(); // supported from API 16
}else {
// loop through all the below activity and finish it
}
}
super.startActivity(intent);
}
最后,如果您需要在清单中为所需的Activities 设置android:taskAffinity,默认情况下所有Activities 将具有相同的关联名称(包名称)。如果您希望覆盖您的所有 Activities,则可以保留此信息。
<activity
android:name="com.example.app.activities.MainActivity"
android:label="@string/title_activity_common"
android:taskAffinity="@string/task_affinity_name">
</activity>
在字符串 xml 中
<string name="task_affinity_name">com.example.app.affinity</string>
注意:如上面所说的低版本,您需要单独完成每个Activity`
在这里找到完整的源代码https://gist.github.com/androidbensin/7d9261fd148c15575dd1