Android按返回键退出程序但不销毁,程序后台运行,同QQ退出处理方式

分类:Android开发技巧点滴1270人阅读评论(1)收藏举报[java] view plain copy print ?
  1. @Override
  2. publicbooleanonKeyDown(intkeyCode,KeyEventevent){
  3. if(keyCode==KeyEvent.KEYCODE_BACK){
  4. moveTaskToBack(false);
  5. returntrue;
  6. }
  7. returnsuper.onKeyDown(keyCode,event);
  8. }

里面的moveTaskToBack()是关键。 转自: http://blog.csdn.net/android_xiaoqi/article/details/8769327

Android moveTaskToBack()方法实现手动隐藏当前Activity

分类:Android UI579人阅读评论(0)收藏举报

moveTaskToBack()方法:在activity中调用moveTaskToBack(boolean nonRoot)方法即可将activity 退到后台,注意不是finish()退出。

参数说明:

参数为false——代表只有当前activity是task根,指应用启动的第一个activity时,才有效;

参数为true——则忽略这个限制,任何activity都可以有效。

说明:判断Activity是否是task根,Activity本身给出了相关方法:isTaskRoot()

moveTaskToBack调用后,task中activity的顺序不会发生变化,例如A启动B,B中调用此方法退到后台,重新启动应用会调用B中的onRestart-onStart-onResume方法,不会重新调用onCreate,而且在B中按下back键返回的还是A,这就是退到后台的功能。


另外在activity中按下back键,实际是调用了finish方法,应用退出。虽然应用已经退出,但进程没有被杀死,android中一个应用运行于独立的一个虚拟机实例中,所以在重新启动应用时一个类中的静态对象还保持着运行时的状态,注意在合适位置复位这些状态。


关于moveTaskToBack方法,官方API解释如下:

public boolean moveTaskToBack (boolean nonRoot)
Since: API Level 1Move the task containing this activity to the back of the activity stack. The activity's order within the task is unchanged.

Parameters
nonRoot If false then this only works if the activity is the root of a task; if true it will work for any activity in a task.

Returns
If the task was moved (or it was already at the back) true is returned, else false.

贴上测试代码:

[java] view plain copy
  1. <spanstyle="font-size:14px;">importandroid.app.Activity;
  2. importandroid.os.Bundle;
  3. importandroid.util.Log;
  4. importandroid.view.View;
  5. importandroid.view.View.OnClickListener;
  6. importandroid.widget.Button;
  7. publicclassMainActivityextendsActivity{
  8. privateButtontv;
  9. @Override
  10. publicvoidonCreate(BundlesavedInstanceState){
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. tv=(Button)findViewById(R.id.test);
  14. tv.setOnClickListener(newOnClickListener(){
  15. @Override
  16. publicvoidonClick(Viewv){
  17. /**
  18. *会调用:onPause()和onStop()
  19. */
  20. moveTaskToBack(true);
  21. Log.e("====","点击运行了moveTaskToBack()方法");
  22. }
  23. });
  24. }
  25. @Override
  26. protectedvoidonPause(){
  27. Log.e("====","onPause()");
  28. super.onPause();
  29. }
  30. @Override
  31. protectedvoidonStop(){
  32. Log.e("====","onStop()");
  33. super.onStop();
  34. }
  35. @Override
  36. protectedvoidonDestroy(){
  37. Log.e("====","onDestroy()");
  38. super.onDestroy();
  39. }
  40. @Override
  41. protectedvoidonResume(){
  42. Log.e("====","onResume()");
  43. super.onResume();
  44. }
  45. @Override
  46. protectedvoidonStart(){
  47. Log.e("====","onStart()");
  48. super.onStart();
  49. }
  50. @Override
  51. protectedvoidonRestart(){
  52. Log.e("====","onRestart()");
  53. super.onRestart();
  54. }
  55. }
  56. </span>


运行一下:

01-13 00:19:45.179: E/====(3801): 点击运行了moveTaskToBack()方法
01-13 00:19:45.199: E/====(3801): onPause()
01-13 00:19:45.662: E/====(3801): onStop()


更多相关文章

  1. Android实现全屏的方法
  2. [android]布局(容器)简介和使用方法
  3. android 动态控制状态栏显示和隐藏的方法实例
  4. Android文件系统的结构及目录用途、操作方法 整理
  5. Android:Error retrieving parent for item: No resource found
  6. Android 性能监控与分析方法
  7. Android 解决setRequestedOrientation之后手机屏幕的旋转不触发o
  8. 面试例题6:两种方法将图像显示在View上
  9. Android NDK报错(Eclipse)及解决方法

随机推荐

  1. XML数据库中几个容易混淆的概念详细介绍
  2. 使用正则表达式进行xml数据验证的代码实
  3. 用XSL翻译Web服务应用程序
  4. 用XML和SQL 2000来管理存储过程调用
  5. 对XML数据使用XMLConvert
  6. 详细介绍把数据转换成XML格式的好处
  7. 使用JavaScript访问XML数据
  8. 使用XML实现BBS(主题列表篇)的详情介绍
  9. XML在语音合成中的应用
  10. HTML中的XML数据岛记录编辑与添加的详细