zoukankan      html  css  js  c++  java
  • 通过广播关闭应用程序(每个Activity)和连续点击两次返回键关闭应用程序

    对于一个应用程序可能有很多个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);
    	}
    到这里就完了!非常简单吧!

  • 相关阅读:
    Vue对象提供的属性功能
    Vue快速入门
    Django-DRF(路由与扩展功能)
    Django-DRF(视图相关)
    Django-DRF(1)
    Django-Xadmin
    python 列表的append()和extend()
    map apply applymap
    pd.merge(), pd.concat()
    描述性分析与数据清洗 笔记
  • 原文地址:https://www.cnblogs.com/loonggg/p/4981816.html
Copyright © 2011-2022 走看看