来自安卓第一行代码(只看java文件,不需要看xml)
退出程序
android.os.Process.killProcess(android.os.Process.myPid()); //(有的程序关闭会重启 这句话不能完全退出程序)
//彻底退出程序
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
System.exit(0);
我们在项目开发的时候可能会遇到安全退出应用的场景,如何能够安全退出多个Activity?
1、抛异常退出
该方法通过抛异常,使程序Force Close。
验证可以,但是,需要解决的问题是,如何使程序结束掉,而不弹出Force Close的窗口。
2、记录打开的Activity
每打开一个Activity,就记录下来。在需要退出时,关闭每一个Activity即可。
3、发送特定广播
在需要结束应用时,发送一个特定的广播,每个Activity收到广播后,关闭即可。
4、递归退出
在打开新的Activity时使用startActivityForResult,然后自己加标志,在onActivityResult中处理,递归关闭。
第二种方法实现
定义一个Application类来存储Activity对象的引用
package com.maso.wuye.activity;
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.app.Application;
public class ExitApplication extends Application {
private List activityList = new LinkedList();
private static ExitApplication instance;
private ExitApplication() {
}
// 单例模式中获取唯一的ExitApplication实例
public static ExitApplication getInstance() {
if (null == instance) {
instance = new ExitApplication();
}
return instance;
}
// 添加Activity到容器中
public void addActivity(Activity activity) {
activityList.add(activity);
}
// 遍历所有Activity并finish
public void exit() {
for (Activity activity : activityList) {
activity.finish();
}
System.exit(0);
}
}
以上这个方法 具体使用未 测试 !(与下面的方面区别在于有没有在需要退出的Activity中手动添加exit方法)
————————————————————————————————
public class ExitAppliation extends Application
{
private List activityList = new LinkedList();
private static ExitAppliation instance;
private ExitAppliation()
{
}
// 单例模式中获取唯一的MyApplication实例
public static ExitAppliation getInstance()
{
if (null == instance)
{
instance = new ExitAppliation();
}
return instance;
}
//添加Activity到容器中
public void addActivity(Activity activity)
{
activityList.add(activity);
}
// 遍历所有Activity并finish
public void exit()
{
for (Activity activity : activityList)
{
activity.finish();
}
System.exit(0);
}
}
注:Application类是为了那些需要保存全局变量设计的基本类,你可以在AndroidManifest.xml的标签中进行自己的实现,这样的结果是:当你的application或者包被建立的时候将引起那个类被建立。就是说application是用来保存全局变量的,并且是在package创建的时候就跟着存在了。所以当我们需要创建全局变量的时候,不需 要再像j2se那样需要创建public权限的static变量,而直接在application中去实现。只需要调用Context的getApplicationContext或者Activity的getApplication方法来获得一个application对象,再做出相应 的处理。
然后在每个Activity的onCreate()方法中添加下面代码:
ExitAppliation.getInstance().addActivity(this);
在需要结束所有Activity的时候调用exit方法:
ExitAppliation.getInstance().exit();
----------------------------------------------------------------------------------------------------
通过通知来完成
Java代码
-
public class BaseActivity extends Activity {
-
protected BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
-
@Override
-
public void onReceive(Context context, Intent intent) {
-
finish();
-
}
-
};
-
-
@Override
-
public void onResume() {
-
super.onResume();
-
// 在当前的activity中注册广播
-
IntentFilter filter = new IntentFilter();
-
filter.addAction("ExitApp");
-
this.registerReceiver(this.broadcastReceiver, filter);
-
}
-
-
@Override
-
protected void onDestroy() {
-
// TODO Auto-generated method stub
-
super.onDestroy();
-
this.unregisterReceiver(this.broadcastReceiver);
-
}
-
}
在你要关闭的Activity里添加myExit()方法,然后在要进行退出程序操作的地方调用myExit()方法就行。
-
public class Activity1 extends BaseActivity {
-
private Button btn1;
-
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
// TODO Auto-generated method stub
-
super.onCreate(savedInstanceState);
-
setContentView(R.layout.a1);
-
-
btn1 = (Button)findViewById(R.id.btn1);
-
btn1.setOnClickListener(new View.OnClickListener() {
-
-
@Override
-
public void onClick(View v) {
-
Intent i = new Intent(Activity1.this, Activity2.class);
-
startActivity(i);
-
}
-
});
-
}
-
/**
-
* 捕获手机物理菜单键
-
*/
-
private long exitTime = 0; //这个一定要放在放在方法名称外面。
-
-
@Override
-
public boolean onKeyDown(int keyCode, KeyEvent event) {
-
if(keyCode == KeyEvent.KEYCODE_BACK){//&& event.getAction() == KeyEvent.ACTION_DOWN
-
if((System.currentTimeMillis()-exitTime) > 2000){
-
Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
-
exitTime = System.currentTimeMillis();
-
} else {
-
myExit(); //小于2000,说明是在2秒内在线按下的返回键
-
}
-
return true;
-
}
-
return super.onKeyDown(keyCode, event); //在onBackPressed()中,super()方法要删除
-
}
-
-
protected void myExit() {
-
Intent intent = new Intent();
-
intent.setAction("ExitApp");
-
this.sendBroadcast(intent);
-
super.finish();
-
}
-
//另外还有生活小助手项目中退出方法 ,通过Timer中的计划方法来退出(可百度)
-
}
退出整个程序
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
System.exit(0);