Android退出程序方法整理

来源:互联网 发布:淘宝新品上架翻页 编辑:程序博客网 时间:2024/04/30 01:01

在使用unity和eclipse集成开发时,遇到了尴尬的情况程序在侦听到unity发来的消息后,跳到另外一个activity后,在另外一个activity里面尝试退出时,试了好几种方法都没有效果,后来使用了广播的方法,终于成功了,非常纠结。整理了一下从网上搜来的试过的方法,留着以后用。

1. Dalvik VM的本地方法

android.os.Process.killProcess(android.os.Process.myPid())    //获取PID 

System.exit(0);   //常规java、c#的标准退出法,返回值为0代表正常退出

2. 任务管理器方法

ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);

am.restartPackage(getPackageName());

首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限android.permission.RESTART_PACKAGES。

3. 根据Activity的声明周期
  Android的窗口类提供了历史栈,可以通过stack的原理来巧妙的实现,在A窗口打开B窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。

  在A窗口中使用下面的代码调用B窗口

  Intent intent = new Intent(); 
  intent.setClass(Android123.this, CWJ.class);
  intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //注意本行的FLAG设置
  startActivity(intent);
  接下来在B窗口中需要退出时直接使用finish方法即可全部退出。

4.制造异常退出

就是制造一个人为的错误,这样Android的dalvik vm将强制关闭程序。这时有个问题就是弹出的Force Close对话框,不过这可以通过重写Android应用程序的Application基类,自己实现Thread.UncaughtExceptionHandler接口的uncaughtException方法,可以避免出现FC窗口。

5.广播方式退出 参考:http://www.cnblogs.com/jauntlin/archive/2011/05/28/2060712.html

 在你的每个Activity里,注册一个特定的Broadcast,当你想退出程序时,就send一个特定的Broadcast,这样所有还没有finish的activity都可以接收到这个broadcast,接收到broadcast后,就finish掉Activity。这样该程序的所有Activity就finish了,也就达到了退出程序的效果。

实现过程中,为了优化程序,首先写一个父类继承Activity,其他的Activity都继承此父类(你也可以在每个Activity中实现其中的代码,不过相比这种有点麻烦),代码如下:

public class ApplicationActivity extends Activity { 

   privateBroadcastReceiver broadcastReceiver = newBroadcastReceiver()
{ 
    @Override
    publicvoidonReceive(Context arg0, Intent arg1) {
        // TODO Auto-generated method stub
        finish();
    }     
};
 
@Override
protectedvoidonResume() {
    // TODO Auto-generated method stub
    super.onResume();
    IntentFilter filter = newIntentFilter();
    filter.addAction("ExitApp");
    this.registerReceiver(broadcastReceiver, filter);
}
     然后在需要退出的Activity中添加close方法,然后在要进行退出程序操作的地方调用close方法即可。代码如下:
//发送广播通知所有窗体关闭
   publicvoidclose()
{
    Intent intent = newIntent();
    intent.setAction("ExitApp");
    this.sendBroadcast(intent);
    super.finish();
}

6.自定义栈

参考:http://disanji.net/2011/02/23/android-four-way-to-quit-current-program/

原创粉丝点击