Android 连续按下返回键完全退出应用

来源:互联网 发布:linux国内软件源 编辑:程序博客网 时间:2024/05/17 04:28

已经很长时间没有写博客了,主要是工作太忙,但是现在觉得很有必要将一些细小的知识点梳理一下,也算是自己对以往的学习的总结,也希望对其他人有所帮助,好了废话少说,来说说今天的主题:两次按下返回键退出应用程序,这个主题里面涉及了两个小知识点:

(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);  }}

这里还涉及到一个知识点,在Activity中定义一个Handler的时候,最好是定义为static的,不然有可能灰导致内存泄露,好了 先写到这里吧,有什么不懂的欢迎留言....

0 0
原创粉丝点击