在使用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);
}
}
|
//发送广播通知所有窗体关闭
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/