方式一:
如果只是在首页,即主activity想退出手动退出程序的话,只要主activity在AndroidMainfest.xml中设置为android:launchMode="singleTask"模式即可然后在打开多级页面后,返回该activity时,只需要回到此页面,之前的多级页面也就自动关闭掉了。然后直接finish()掉即可。
方式二:
在开发过程中发现system.exit(0)或 Process.killProcess调用后,如果还存在activity,会导致程序杀死重启等很多问题。
首先在 application中添加boolean值ifexit
public class BaseApplicationLike extends Application {
public static boolean mIsExit;
}
然后在我们的BaseActivity中,也就是我们所有activity的父类
public void onRestart() {
super.onRestart();
if(BaseApplicationLike.mIsExit == true){
finish();
}
}
然后在我们的每个继承BaseActivity的activity的onCreate中添加
BaseApplicationLike.mIsExit = false;
然后在需要关闭的主页activity中添加onKeyDown监听事件:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (BaseApplicationLike.mIsExit == false) {
BaseApplicationLike.mIsExit = true;
Toast.makeText(this, "再次点击退出", Toast.LENGTH_SHORT).show();
Timer tExit = new Timer();
tExit.schedule(new TimerTask() {
public void run() {
BaseApplicationLike.mIsExit = false; // 取消退出
}
}, 1000); // 如果1秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务
} else {
BaseApplicationLike.mIsExit = true;
finish();
}
}
return false;
}
方法三:
设置一个专门的集合对Activity进行管理。
public class ActivityCollector {
private ActivityCollector(){}
public static ActivityCollector getInstance(){
return holder.mInstance;
}
private static class holder{
private static final ActivityCollector mInstance = new ActivityCollector();
}
private List<Activity> activities = new ArrayList<>();
public void addActivity(Activity activity){
activities.add(activity);
}
public void removeActivity(Activity activity){
activities.remove(activity);
}
public void finishAll(){
for (Activity activity : activities){
if (!activity.isFinishing()){
activity.finish();
}
}
activities.clear();
}
}
更新的位置可以在BaseActivity上,也可以在Application.ActivityLifecycleCallbacks中:
open class BaseActivity :AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
ActivityCollector.addActivit(this)
}
override fun onDestroy() {
super.onDestroy()
ActivityCollector.removeActivity(this)
}
public class AppActivityLifecycleListener implements Application.ActivityLifecycleCallbacks {
@Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle bundle) {
ActivityCollector.addActivity(this)
}
//...
@Override
public void onActivityDestroyed(@NonNull Activity activity) {
ActivityCollector.removeActivity(this)
}
}
public class BaseApplicationLike extends Application {
@Override
public void onCreate() {
super.onCreate();
sAppLike = this;
sAppLike.registerActivityLifecycleCallbacks(new AppActivityLifecycleListener());
//...
}
}