通过广播关闭应用程序(每个Activity)和连续点击两次返回键关闭应用程序

来源:互联网 发布:淘宝双十一的营销策略 编辑:程序博客网 时间:2024/05/16 11:47

对于一个应用程序可能有很多个Activity,可能每个人并不想一个个的去关闭Activity,也有可能忘了,那怎么关闭所有的未关闭的Activity呢,其实有很多方法,但是我最喜欢的一种就是通过广播事件去关闭,这样简单易懂,方便操作,很快捷。

首先就是建立一个父类,让所有的activity继承父类,这样就不用每次都去注册广播,只要在父类注册好就行了,代码如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package net.loonggg.test;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.BroadcastReceiver;  
  5. import android.content.Context;  
  6. import android.content.Intent;  
  7. import android.content.IntentFilter;  
  8.   
  9. public class BaseActivity extends Activity {  
  10.     /** 
  11.      * 关闭Activity的广播,放在自定义的基类中,让其他的Activity继承这个Activity就行 
  12.      */  
  13.     protected BroadcastReceiver finishAppReceiver = new BroadcastReceiver() {  
  14.         @Override  
  15.         public void onReceive(Context context, Intent intent) {  
  16.             finish();  
  17.         }  
  18.     };  
  19.   
  20.     @Override  
  21.     public void onResume() {  
  22.         super.onResume();  
  23.         // 在当前的activity中注册广播  
  24.         IntentFilter filter = new IntentFilter();  
  25.         filter.addAction("net.loonggg.exitapp");  
  26.         this.registerReceiver(this.finishAppReceiver, filter);  
  27.     }  
  28.   
  29.     @Override  
  30.     protected void onDestroy() {  
  31.         super.onDestroy();  
  32.         this.unregisterReceiver(this.finishAppReceiver);  
  33.     }  
  34. }  
其次就是子类继承,代码如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package net.loonggg.test;  
  2.   
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.view.KeyEvent;  
  6. import android.view.View;  
  7. import android.widget.Button;  
  8. import android.widget.Toast;  
  9.   
  10. public class MainActivity extends BaseActivity {  
  11.     private Button btn;  
  12.   
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.activity_main);  
  17.         btn = (Button) findViewById(R.id.btn);  
  18.   
  19.         btn.setOnClickListener(new View.OnClickListener() {  
  20.   
  21.             @Override  
  22.             public void onClick(View v) {  
  23.                 Intent intent = new Intent(getApplicationContext(),  
  24.                         SecondActivity.class);  
  25.                 startActivity(intent);  
  26.             }  
  27.         });  
  28.     }  
  29.   
  30.     private long exitTime = 0;  
  31.   
  32.     @Override  
  33.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  34.         if (KeyEvent.KEYCODE_BACK == keyCode) {  
  35.             // 判断是否在两秒之内连续点击返回键,是则退出,否则不退出  
  36.             if (System.currentTimeMillis() - exitTime > 2000) {  
  37.                 Toast.makeText(getApplicationContext(), "再按一次退出程序",  
  38.                         Toast.LENGTH_SHORT).show();  
  39.                 // 将系统当前的时间赋值给exitTime  
  40.                 exitTime = System.currentTimeMillis();  
  41.             } else {  
  42.                 exitApp();  
  43.             }  
  44.             return true;  
  45.         }  
  46.         return super.onKeyDown(keyCode, event);  
  47.     }  
  48.   
  49.     /** 
  50.      * 退出应用程序的方法,发送退出程序的广播 
  51.      */  
  52.     private void exitApp() {  
  53.         Intent intent = new Intent();  
  54.         intent.setAction("net.loonggg.exitapp");  
  55.         this.sendBroadcast(intent);  
  56.     }  
  57.   
  58.     @Override  
  59.     protected void onDestroy() {  
  60.         super.onDestroy();  
  61.         System.out.println("-------MainActivity-------->onDestroy()");  
  62.     }  
  63.   
  64. }  
其实不用多说,我相信大家代码肯定都看懂了,主要是思路,代码都是非常简单的基础的。那下边我再介绍连续点击两次返回键退出应用程序的方法,方法如下:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. /** 
  2.      * 记录标记时间 
  3.      */  
  4.     private long exitTime = 0;  
  5.   
  6.     @Override  
  7.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  8.         if (KeyEvent.KEYCODE_BACK == keyCode) {  
  9.             // 判断是否在两秒之内连续点击返回键,是则退出,否则不退出  
  10.             if (System.currentTimeMillis() - exitTime > 2000) {  
  11.                 Toast.makeText(getApplicationContext(), "再按一次退出程序",  
  12.                         Toast.LENGTH_SHORT).show();  
  13.                 // 将系统当前的时间赋值给exitTime  
  14.                 exitTime = System.currentTimeMillis();  
  15.             } else {  
  16.                 exitApp();  
  17.             }  
  18.             return true;  
  19.         }  
  20.         return super.onKeyDown(keyCode, event);  
  21.     }  
0 0