Android退出程序离开与关闭程序的弹出窗口
[复制链接]
0
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,在B中如何关闭整个Android应用程序呢? 这里Android123给大家三种比较简单的方法实现。
首先要说明在B中直接使用finish(),接下来手机显示的还是主窗口A,所以一起来看看Android开发网是如何实现的吧.
1. Dalvik VM的本地方法
android.os.Process.killProcess(android.os.Process.myPid()) //获取PID,目前获取自己的也只有该API,否则从/proc中自己的枚举其他进程吧,不过要说明的是,结束其他进程不一定有权限,不然就乱套了。
System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出
2. 任务管理器方法
首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限android.permission.RESTART_PACKAGES,我们直接结束自己的package即可,直接使用ActivityManager类的restartPackage方法即可,参数为package name,该类通过getSystemService(Context.ACTIVITY_SERVICE)来实例化ActivityManager对象,这种方法系统提供的,但需要显示声明权限,所以使用中需要综合考虑。
3. 根据Activity的声明周期
我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。
在A窗口中使用下面的代码调用B窗口
01.Intent intent = new Intent(); 02.intent.setClass(Android123.this, CWJ.class); 03.intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置 04.startActivity(intent); 接下来在B窗口中需要退出时直接使用finish方法即可全部退出。
对话窗口上的ICON图标
范例说明
此范例将说明设置离开与关闭程序的对话窗口提示选项。而打开这个对话窗口是由一个按钮来处理,当单击"按我离开"按钮时,会出现 AlertDialog的信息,而AlertDialog的内容设置,先设置是否要显示title的文字(也可以不设置),该范例是会让它显示的,所以使用res/values/ string/app_about这个字符串常数。
下一步则是显示AlertDialog的正文信息,使用的方法是.setMessage,如果不使用的话,就会发现AlertDialog的正文的字段是不显示的,故在这边设置显示内容为提示对话内容,正文的信息则是res/values/string/app_msg。
而本范例最重要的并非是AlertDialog的设计或流程,因为这些在前一章已经看过了,在此要示范的是如何在AlertDialog里显示图片、配置"确定"以及"取消"按钮,并学会如何判断在AlertDialog里单击的按钮事件,即设计在离开程序之前跳出AlertDialog,让 User再一次确认是否关闭应用程序,并在AlertDialog上设计"确定"与"取消"按钮,当单击"确定"按钮才会真的离开程序,单击"取消"按钮则会回到程序中。
运行结果(见图4-27)
范例程序
1. src/irdc.ex04_26/EX04_26.java
主程序设置的AlertDialog有两个Button,或许有人会询问:Button没有在layout/main.xml里创建,为何会出现呢?这是因为在动态生成AlertDialog的同时,也重写了按钮事件;AlertDialog里面的Button语句,与一般在Layout当中先部署Button不一样,"确定"Button跟"取消"Button都会有追加方法的描述。如"确定"Button的描述是 PositiveButton,而"取消"Button的命令为NegativeButton。
在构造AlertDialog内的"确定"Button中的OnClickListener事件后,如果发生Positive Button事件,则以finish()结束程序,程序就会自行关闭,这个finish()代表的意思,是把整个Activity给关掉,并由 Android.os回收已配置的系统资源。
01./* import程序略 */ 02. 03.public class EX04_26 extends Activity 04.{ 05. /*声明 Button对象*/ 06. private Button mButton1; 07. 08. /** Called when the activity is first created. */ 09. @Override 10. public void onCreate(Bundle savedInstanceState) 11. { 12. super.onCreate(savedInstanceState); 13. setContentView(R.layout.main); 14. 15. /*取得 Button对象*/ 16. mButton1 = (Button) findViewById(R.id.myButton1); 17. mButton1.setOnClickListener(new Button.OnClickListener() 18. { 19. @Override 20. public void onClick(View v) 21. { 22. // TODO Auto-generated method stub 23. new AlertDialog.Builder(EX04_26.this) 24. /*弹出窗口的最上头文字*/ 25. .setTitle(R.string.app_about) 26. /*设置弹出窗口的图式*/ 27. .setIcon(R.drawable.hot) 28. /*设置弹出窗口的信息*/ 29. .setMessage(R.string.app_about_msg) 30. .setPositiveButton(R.string.str_ok, 31. new DialogInterface.OnClickListener() 32. { 33. public void onClick 34. (DialogInterface dialoginterface, int i) 35. { 36. finish();/*关闭窗口*/ 37. } 38. } 39. ).setNegativeButton(R.string.str_no, 40. new DialogInterface.OnClickListener() 41. { 42. /*设置跳出窗口的返回事件*/ 43. public void onClick(DialogInterface dialoginterface, int i) 44. { 45. } 46. } 47. ).show(); 48. } 49. });} 50.}
扩展学习
AlertDialog.setIcon()可以置换对话窗口里的图标,在不设置此方法时就只有文字,若使用了setIcon()方法后,就会将图标显示在对话窗口当中。
你可以试着使用setIcon()方法将Drawable ID传入(默认的drawable路径为res/drawable)即可,以下的代码段可将原本的感叹号图标更换为一个心碎的小图标。
01.new AlertDialog.Builder(EX04_26.this) 02./*弹出窗口的最上头文字*/ 03..setTitle(R.string.app_about) 04./*设置弹出窗口的图式*/ 05..setIcon(R.drawable.hot) 06./*设置弹出窗口的信息*/ 07.//.setMessage(R.string.app_about_msg) 运行结果如图4-28所示。
需留意放入的Icon图片不可以太大,最好先缩图之后再导入项目,若能参考手机画面的分辨率来设计更佳。
Android退出程序离开与关闭程序的弹出窗口
[复制链接]
0
Android程序有很多Activity,比如说主窗口A,调用了子窗口B,在B中如何关闭整个Android应用程序呢? 这里Android123给大家三种比较简单的方法实现。
首先要说明在B中直接使用finish(),接下来手机显示的还是主窗口A,所以一起来看看Android开发网是如何实现的吧.
1. Dalvik VM的本地方法
android.os.Process.killProcess(android.os.Process.myPid()) //获取PID,目前获取自己的也只有该API,否则从/proc中自己的枚举其他进程吧,不过要说明的是,结束其他进程不一定有权限,不然就乱套了。
System.exit(0); //常规java、c#的标准退出法,返回值为0代表正常退出
2. 任务管理器方法
首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限android.permission.RESTART_PACKAGES,我们直接结束自己的package即可,直接使用ActivityManager类的restartPackage方法即可,参数为package name,该类通过getSystemService(Context.ACTIVITY_SERVICE)来实例化ActivityManager对象,这种方法系统提供的,但需要显示声明权限,所以使用中需要综合考虑。
3. 根据Activity的声明周期
我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。
在A窗口中使用下面的代码调用B窗口
01.Intent intent = new Intent(); 02.intent.setClass(Android123.this, CWJ.class); 03.intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); //注意本行的FLAG设置 04.startActivity(intent); 接下来在B窗口中需要退出时直接使用finish方法即可全部退出。
对话窗口上的ICON图标
范例说明
此范例将说明设置离开与关闭程序的对话窗口提示选项。而打开这个对话窗口是由一个按钮来处理,当单击"按我离开"按钮时,会出现 AlertDialog的信息,而AlertDialog的内容设置,先设置是否要显示title的文字(也可以不设置),该范例是会让它显示的,所以使用res/values/ string/app_about这个字符串常数。
下一步则是显示AlertDialog的正文信息,使用的方法是.setMessage,如果不使用的话,就会发现AlertDialog的正文的字段是不显示的,故在这边设置显示内容为提示对话内容,正文的信息则是res/values/string/app_msg。
而本范例最重要的并非是AlertDialog的设计或流程,因为这些在前一章已经看过了,在此要示范的是如何在AlertDialog里显示图片、配置"确定"以及"取消"按钮,并学会如何判断在AlertDialog里单击的按钮事件,即设计在离开程序之前跳出AlertDialog,让 User再一次确认是否关闭应用程序,并在AlertDialog上设计"确定"与"取消"按钮,当单击"确定"按钮才会真的离开程序,单击"取消"按钮则会回到程序中。
运行结果(见图4-27)
范例程序
1. src/irdc.ex04_26/EX04_26.java
主程序设置的AlertDialog有两个Button,或许有人会询问:Button没有在layout/main.xml里创建,为何会出现呢?这是因为在动态生成AlertDialog的同时,也重写了按钮事件;AlertDialog里面的Button语句,与一般在Layout当中先部署Button不一样,"确定"Button跟"取消"Button都会有追加方法的描述。如"确定"Button的描述是 PositiveButton,而"取消"Button的命令为NegativeButton。
在构造AlertDialog内的"确定"Button中的OnClickListener事件后,如果发生Positive Button事件,则以finish()结束程序,程序就会自行关闭,这个finish()代表的意思,是把整个Activity给关掉,并由 Android.os回收已配置的系统资源。
01./* import程序略 */ 02. 03.public class EX04_26 extends Activity 04.{ 05. /*声明 Button对象*/ 06. private Button mButton1; 07. 08. /** Called when the activity is first created. */ 09. @Override 10. public void onCreate(Bundle savedInstanceState) 11. { 12. super.onCreate(savedInstanceState); 13. setContentView(R.layout.main); 14. 15. /*取得 Button对象*/ 16. mButton1 = (Button) findViewById(R.id.myButton1); 17. mButton1.setOnClickListener(new Button.OnClickListener() 18. { 19. @Override 20. public void onClick(View v) 21. { 22. // TODO Auto-generated method stub 23. new AlertDialog.Builder(EX04_26.this) 24. /*弹出窗口的最上头文字*/ 25. .setTitle(R.string.app_about) 26. /*设置弹出窗口的图式*/ 27. .setIcon(R.drawable.hot) 28. /*设置弹出窗口的信息*/ 29. .setMessage(R.string.app_about_msg) 30. .setPositiveButton(R.string.str_ok, 31. new DialogInterface.OnClickListener() 32. { 33. public void onClick 34. (DialogInterface dialoginterface, int i) 35. { 36. finish();/*关闭窗口*/ 37. } 38. } 39. ).setNegativeButton(R.string.str_no, 40. new DialogInterface.OnClickListener() 41. { 42. /*设置跳出窗口的返回事件*/ 43. public void onClick(DialogInterface dialoginterface, int i) 44. { 45. } 46. } 47. ).show(); 48. } 49. });} 50.}
扩展学习
AlertDialog.setIcon()可以置换对话窗口里的图标,在不设置此方法时就只有文字,若使用了setIcon()方法后,就会将图标显示在对话窗口当中。
你可以试着使用setIcon()方法将Drawable ID传入(默认的drawable路径为res/drawable)即可,以下的代码段可将原本的感叹号图标更换为一个心碎的小图标。
01.new AlertDialog.Builder(EX04_26.this) 02./*弹出窗口的最上头文字*/ 03..setTitle(R.string.app_about) 04./*设置弹出窗口的图式*/ 05..setIcon(R.drawable.hot) 06./*设置弹出窗口的信息*/ 07.//.setMessage(R.string.app_about_msg) 运行结果如图4-28所示。
需留意放入的Icon图片不可以太大,最好先缩图之后再导入项目,若能参考手机画面的分辨率来设计更佳。