Android长时间及连续两次按BackUp按键退出程序
来源:互联网 发布:校园网络海报 编辑:程序博客网 时间:2024/06/03 17:46
今天自己学习了Android按BackUp按键退出程序的小Demo,发现网上有好多实例,但感觉他们的能解决问题,但可能会存在内存泄漏的问题,今天就自己总结了一下!
分析问题:
1>重写Activity中的onKeyDown()方法
2>定时器其中(Handler、Timer、ScheduledExecutorService)一个或通过时间差
3>一个退出程序的标志
由于我们可能在Activity中开启一些Service,就必须在onDestroy()中释放掉,所以我们必须在Activity.onDescroy()中System.exit(0);来结束进程。不能再onKeyDown()方法中;这样才能避免内存泄漏问题。
Timer实现:
public class MainActivity extends Activity { private static boolean isExit = false; private Timer timer = new Timer("zjl"); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event){ if (keyCode == KeyEvent.KEYCODE_BACK ) { Log.v(TAG, "onKeyDown"); exit(); return false; } return super.onKeyDown(keyCode, event); } private void exit() { if(!isExit){ isExit = true; Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); timer.schedule(new TimerTask(){ @Override public void run() { isExit = false; } }, 2000); }else{ finish(); } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); System.exit(0); }}
Handler实现:
public class MainActivity extends Activity { private static boolean isExit = false; private Timer timer = new Timer("zjl"); private Handler mHandler = new Handler(){ @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); isExit = false; } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event){ if (keyCode == KeyEvent.KEYCODE_BACK ) { Log.v(TAG, "onKeyDown"); exit(); return false; } return super.onKeyDown(keyCode, event); } private void exit() { if(!isExit){ isExit = true; Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show(); mHandler.sendEmptyMessageDelayed(0, 2000); } else{ finish(); } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); System.exit(0); }}
时间差:
public class MainActivity extends Activity { private static boolean isExit = false; private long exitTime = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { exit(); return false; } return super.onKeyDown(keyCode, event); } public void exit() { if ((System.currentTimeMillis() - exitTime) > 2000) { Toast.makeText(getApplicationContext(), "再按一次退出程序",Toast.LENGTH_SHORT).show(); exitTime = System.currentTimeMillis(); } else { finish(); } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); System.exit(0); }}
注意:当我们长时间按Back键时,不要重写onKeyLongPress()方法,因为我们长时间按时,一直在调用onKeyDown()方法,onKeyLongPress()只调用一次;
下面将分析Android中如何完全退出应用程序
0 0
- Android长时间及连续两次按BackUp按键退出程序
- Android 两次返回按键退出程序
- android连续按两次返回退出程序(完整代码)
- Android 连续按两次返回键退出程序
- Android连续点击两次退出程序
- Android连续点击两次退出程序
- Android连续点击两次退出程序
- Android连续点击两次退出程序
- Android连续两次后退键退出程序
- Android连续点击两次退出程序
- Android连续点击两次退出程序
- Android连续点击两次退出程序
- Android连续点击两次退出程序
- Android开发-再按一次退出程序 连续按两次退出程序
- Android之连续按两次退出应用
- 连续点击两次退出程序
- Android程序按两次退出
- Android连续点击两次Back键退出程序 分类: Android
- HTTP报文结构
- Android Studio 中使用Lambda
- 码农小汪-spring框架学习之1-spring简单的介绍入门
- 【matlab】meshgrid生成网格原理1
- 拖拽上传图片--文件
- Android长时间及连续两次按BackUp按键退出程序
- 枚举小结
- [J2EE]java批量修改视频文件名
- Log4j全面详解
- 解决win8.1 连不上无线的方法
- 第十题(2016.4.9)
- java多态实例
- 直方图规定化
- 数据结构之字符串