- 杀死进程。
这种方法是没有效果的只能杀死当前的Activity
无法关闭程序,在1.5的时候有用,谷歌设计的时候规定程序不能自杀android.os.Process.killProcess(android.os.Process.myPid())
. - 终止当前正在运行的Java虚拟机,导致程序终止.
这种方法也是没有效果的,因为Android
用的是dalvik
虚拟机System.exit(0);
- 强制关闭与该包有关联的一切执行
这种方法只能杀死别人,无法杀死自己
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
manager.restartPackage(getPackageName());
同时需要申请权限
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
既然上面介绍的三种方法都没有效果,那么怎么才能退出应用程序呢?
就是自定义一个Application
,在该Application
中去定义一个List<Activity>
的集合来记录中每一个开启的Activity
,在退出的时候去遍历这个List<Activity>
集合,然后挨个的进行mActivity.finish()
方法,这要求在每开启一个Activity
的时候都加入到List
集合中,并且在Activity
退出的时候从List
集合中将其移除。
public class Activity01 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); MyApp myApp = (MyApp) getApplication(); myApp.activies.add(this); } @Override protected void onDestroy() { super.onDestroy(); MyApp myApp = (MyApp) getApplication(); myApp.activies.remove(this); } public void click1(View view){ Intent intent = new Intent(this,Activity01.class); startActivity(intent); } public void click2(View view){ Intent intent = new Intent(this,Activity02.class); startActivity(intent); } public void exit(View view){ MyApp myApp = (MyApp) getApplication(); for(Activity ac : myApp.activies){ ac.finish(); } } } public class Activity02 extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); MyApp myApp = (MyApp) getApplication(); myApp.activies.add(this); } public void click1(View view) { Intent intent = new Intent(this, Activity01.class); startActivity(intent); } public void click2(View view) { Intent intent = new Intent(this, Activity02.class); startActivity(intent); } public void exit(View view) { MyApp myApp = (MyApp) getApplication(); for (Activity ac : myApp.activies) { ac.finish(); } } @Override protected void onDestroy() { super.onDestroy(); MyApp myApp = (MyApp) getApplication(); myApp.activies.remove(this); } } public class MyApp extends Application { //存放当前应用程序里面打开的所有的activity public List<Activity> activies; @Override public void onCreate() { activies = new ArrayList<Activity>(); super.onCreate(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!