已经很长时间没有写博客了,主要是工作太忙,但是现在觉得很有必要将一些细小的知识点梳理一下,也算是自己对以往的学习的总结,也希望对其他人有所帮助,好了废话少说,来说说今天的主题:两次按下返回键退出应用程序,这个主题里面涉及了两个小知识点:
(1) 连续两次按下返回键 退出应用
(2) 如何正确的退出应用程序
首先实现第一个功能:
思路:第一次按返回键时,将退出标志设置为true,并通过handler发送一个延迟2S的消息,如果两秒内用户没有按下第二次返回,那么在handleMessage中将退出标示设置为false
第二个功能:以前在网上发现了好多退出应用的方法,如下:
android.os.Process.killProcess(android.os.Process.myPid()) 但是经过证实,这个方法并不能完全退出应用,只能销毁当前Acivity
System.exit(0); 终止java虚拟机 也是没有效果的
那我就说说我的思路吧,自定义一个Application,并在其中创建一个List,保存应用中的所有的Activity,当创建一个Activity的时候,将该Activity加入列表,当销毁一个Activity的
时候移除该Activity。
直接看代码吧
public class MyApplication extends Application { private static final String TAG = "MyApplication"; public List<Activity> allActivity=new ArrayList<Activity>(); public void addActivity(Activity activity) { allActivity.add(activity); } public void removeActivity(Activity activity) { allActivity.remove(activity); } public void exitApp() { for(Activity a:allActivity) { a.finish(); } } }
public class MainActivity extends Activity { private Handler handler; private boolean isExitApp=false; private MyApplication myApp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myApp=(MyApplication)this.getApplication(); myApp.addActivity(this); handler=new MyHandler(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_BACK) { if(isExitApp==true) { myApp.exitApp(); }else { isExitApp=true; handler.sendEmptyMessageDelayed(1, 2000); Toast.makeText(this, "再次按下返回键就退出应用程序", 3000).show(); } return true; } return super.onKeyDown(keyCode, event); } public static class MyHandler extends Handler { private WeakReference<MainActivity> parent; public MyHandler(MainActivity activity) { parent=new WeakReference<MainActivity>(activity); } @Override public void handleMessage(Message msg) { parent.get().isExitApp=false; } } @Override protected void onDestroy() { super.onDestroy(); myApp.removeActivity(this); } }