對於一個應用程序可能有很多個Activity,可能每個人並不想一個個的去關閉Activity,也有可能忘了,那怎麼關閉所有的未關閉的Activity呢,其實有很多方法,但是我最喜歡的一種就是通過廣播事件去關閉,這樣簡單易懂,方便操作,很快捷。
首先就是建立一個父類,讓所有的activity繼承父類,這樣就不用每次都去註冊廣播,只要在父類註冊好就行了,代碼如下:
- package net.loonggg.test;
- import android.app.Activity;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- public class BaseActivity extends Activity {
- /**
- * 關閉Activity的廣播,放在自定義的基類中,讓其他的Activity繼承這個Activity就行
- */
- protected BroadcastReceiver finishAppReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- finish();
- }
- };
- @Override
- public void onResume() {
- super.onResume();
- // 在當前的activity中註冊廣播
- IntentFilter filter = new IntentFilter();
- filter.addAction("net.loonggg.exitapp");
- this.registerReceiver(this.finishAppReceiver, filter);
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- this.unregisterReceiver(this.finishAppReceiver);
- }
- }
- package net.loonggg.test;
- import android.content.Intent;
- import android.os.Bundle;
- import android.view.KeyEvent;
- import android.view.View;
- import android.widget.Button;
- import android.widget.Toast;
- public class MainActivity extends BaseActivity {
- private Button btn;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- btn = (Button) findViewById(R.id.btn);
- btn.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent intent = new Intent(getApplicationContext(),
- SecondActivity.class);
- startActivity(intent);
- }
- });
- }
- private long exitTime = 0;
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (KeyEvent.KEYCODE_BACK == keyCode) {
- // 判斷是否在兩秒之內連續點擊返回鍵,是則退出,否則不退出
- if (System.currentTimeMillis() - exitTime > 2000) {
- Toast.makeText(getApplicationContext(), "再按一次退出程序",
- Toast.LENGTH_SHORT).show();
- // 將系統當前的時間賦值給exitTime
- exitTime = System.currentTimeMillis();
- } else {
- exitApp();
- }
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }
- /**
- * 退出應用程序的方法,發送退出程序的廣播
- */
- private void exitApp() {
- Intent intent = new Intent();
- intent.setAction("net.loonggg.exitapp");
- this.sendBroadcast(intent);
- }
- @Override
- protected void onDestroy() {
- super.onDestroy();
- System.out.println("-------MainActivity-------->onDestroy()");
- }
- }
- /**
- * 記錄標記時間
- */
- private long exitTime = 0;
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if (KeyEvent.KEYCODE_BACK == keyCode) {
- // 判斷是否在兩秒之內連續點擊返回鍵,是則退出,否則不退出
- if (System.currentTimeMillis() - exitTime > 2000) {
- Toast.makeText(getApplicationContext(), "再按一次退出程序",
- Toast.LENGTH_SHORT).show();
- // 將系統當前的時間賦值給exitTime
- exitTime = System.currentTimeMillis();
- } else {
- exitApp();
- }
- return true;
- }
- return super.onKeyDown(keyCode, event);
- }