会做出这个demo,主要原因在于下班后看到群里都在谈论这个问题,一下子兴趣由起,下班了吃完饭继续加班搞个demo来试试。废话不多说了,以前写上学作文也这样,先搞个长长的开头凑字数
当然,说到完美APP退出,我以前经常用的方法就是使用List来存储每个Activity,然后要退出的时候,就是要关掉所有的Activity,直接调用finishAll就行啦,其实就是一个ActivityManager的管理器而已。但是。。。但是。。。今天在群里有人问了这个问题,群主竟然说用这种方法来退出应用的别说是我群里的人。瞬间觉得自己low了很多,麻痹我不是这么low的人啊,躺着也中枪啊,我毕设都是这么做的啊!!!于是,兴(一)趣(气)一(之)来(下)搞起了demo来,查了网上的资料,貌似有两种比较能接受,且还算完美实现退出的方法。下面就具体的讲下实现的方法吧.。
一。发送广播退出(好像很多人都知道)
这种退出方式很早就有所耳闻,但没去尝试,今天就网上搜了下,实现了,确实可以,比较推荐。
具体代码是这样的,先建一个Activity的基类,作为来放Broadcast的地方,这样其他Activity只要继承此基类就行了,不用每次都要重写一遍注册和注销广播。
代码如下:
public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentFilter filter = new IntentFilter();
filter.addAction("com.jrue.exitApp");
registerReceiver(mExitReceiver, filter);
}
private BroadcastReceiver mExitReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if ("com.jrue.exitApp".equals(intent.getAction())) {
context.unregisterReceiver(this);
finish();
}
}
};
}
在退出的时候只要去发送这个广播就行啦:
case R.id.exit_use_broadcast:
Intent intent = new Intent("com.jrue.exitApp");
getApplicationContext().sendBroadcast(intent);
break;
好!完美运行,这个方法可以。
二。切换到后台,最后finish掉(其实不知道怎么命名啦)
原来大概是这样的,不知道会不会理解错。就是通过setFlags将其改变为 Intent.FLAG_ACTIVITY_CLEAR_TOP 状态,而这个状态具体怎么讲呢,就是进入的Activity若在栈中已经存在的时候,则将此Activity之上的其他Activity移除栈,以达到将目标Activity移至栈顶的目的。然后setAction的 Intent.ACTION_MAIN 找到程序的第一个Activity,也就是程序第一次打开出现的Activity,很有可能就是栈底的Activity,所以我们这样做的目的就很简单啦。
总结一下:就是故意放进去一个应用打开第一个打开的activity,然后改变Flags,让第一个Activity之上的Activity出栈,使第一个Activity顺利达到栈顶,然后直接finish(),因为栈中也就只有一个Activity了,finish就是关闭应用了。太骚了这方法。
代码如下:
Intent intent2 = new Intent(Intent.ACTION_MAIN);
intent2.addCategory(Intent.CATEGORY_HOME);
intent2.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent2);
// android.os.Process.killProcess(android.os.Process.myPid());
finish();
好啦。也就这样了,demo的下载地址也会奉上,有用最好了,没用可以无视之无视之~~~小弟不才啊!