?
大家好,好久不見(jiàn)了,我們?cè)陂_(kāi)發(fā)一個(gè)android應(yīng)用時(shí),有可能有N個(gè)Activity,而在每個(gè)Activity里的菜單里有個(gè)"退出程序"菜單,這里就要完全退出程序了,所以今天給大家分享的是Android應(yīng)用開(kāi)發(fā)完全退出程序的通用方法,以前我在網(wǎng)上收了幾種方法,但都不能通用,比如:任務(wù)管理器方法(ActivityManager):
首先要說(shuō)明該方法運(yùn)行在Android 1.5 - 2.1 才可以(不過(guò)蠻好用的撒!),2.2以后就不行了,同時(shí)需要加如下權(quán)限:
?
- <uses-permission?android:name= "android.permission.RESTART_PACKAGES" ?/>??
?
用法只有如下兩行代碼:
?
- ActivityManager?am?=?(ActivityManager)getSystemService?(Context.ACTIVITY_SERVICE);??
- am.restartPackage( "packagename" );??
?
上面要是2.2以后能通用就非常完美了,可是結(jié)果你懂得。。。
所以為了通用想到了另外一種方法,就是當(dāng)我們點(diǎn)擊“退出程序”菜單時(shí),可以從當(dāng)前Activity跳轉(zhuǎn)到主Activity(就是我們打開(kāi)程序最先啟動(dòng)的那個(gè)Activity),通過(guò)Intent告訴主Activity我要退出程序,然后主Activity調(diào)用finish()方法即可。由于這一過(guò)程很短暫,以致于我們沒(méi)觀察到Activity有任何切換就退出程序了!
同樣為了讓大家更容易理解,我做了一個(gè)Demo.為了省事,程序運(yùn)行時(shí)我直接就從MainActivity跳轉(zhuǎn)到BActivity,在BActivity有個(gè)“退出程序”菜單,點(diǎn)擊會(huì)退出程序。具體過(guò)程如下:
首先第一步:新建一個(gè)Android工程,命名為ExitDemo(目錄結(jié)構(gòu)圖如下)
第二步:定義一個(gè)工具類(lèi)Sysutil用來(lái)退出程序,這樣定義好處可以在多個(gè)Activity的時(shí)候復(fù)用,代碼如下:
?
- package ?com.tutor.exit;??
- import ?android.app.ActivityManager;??
- import ?android.content.Context;??
- import ?android.content.Intent;??
- public ? class ?SysUtil?{??
- ???? public ? static ? final ? int ??EXIT_APPLICATION?=? 0x0001 ;??
- ??????
- ???? private ?Context?mContext;??
- ??????
- ???? public ?SysUtil(Context?context){??
- ???????? this .mContext?=?context;??
- ????}??
- ??????
- ???? //完全退出應(yīng)用 ??
- ???? public ? void ?exit(){??
- ??????????
- //??????1.5?-?2.1之前下面兩行是ok的,2.2之后就不行了,所以不通用 ??
- //??????ActivityManager?am?=?(ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE); ??
- //??????am.restartPackage("com.tutor.exit"); ??
- ??????????
- ????????Intent?mIntent?=? new ?Intent();??
- ????????mIntent.setClass(mContext,?MainActivity. class );??
- ???????? //這里設(shè)置flag還是比較?重要的 ??
- ????????mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);??
- ???????? //發(fā)出退出程序指示 ??
- ????????mIntent.putExtra( "flag" ,?EXIT_APPLICATION);??
- ????????mContext.startActivity(mIntent);??
- ????}??
- }??
?
?
第三步:修改MainActivity.java,代碼如下:
?
- package ?com.tutor.exit;??
- import ?android.app.Activity;??
- import ?android.content.Intent;??
- import ?android.os.Bundle;??
- public ? class ?MainActivity? extends ?Activity?{??
- ???? @Override ??
- ???? public ? void ?onCreate(Bundle?savedInstanceState)?{??
- ???????? super .onCreate(savedInstanceState);??
- ????????setContentView(R.layout.main);???????
- ????}??
- ??????
- ??? //這里用來(lái)接受退出程序的指令? ??
- ???? @Override ??
- ???? protected ? void ?onStart()?{??
- ???????? int ?flag?=?getIntent().getIntExtra( "flag" ,? 0 );??
- ???????? if (flag?==?SysUtil.EXIT_APPLICATION){??
- ????????????finish();??
- ????????}??
- ???????? super .onResume();??
- ??????????
- ????}??
- ???? //程序啟動(dòng)后就進(jìn)入了BActivity ??
- ???? @Override ??
- ???? protected ? void ?onResume()?{??
- ????????Intent?mIntent?=? new ?Intent();??
- ????????mIntent.setClass( this ,?BActivity. class );??
- ????????startActivity(mIntent);??
- ???????? super .onStart();??
- ????}??
- ??????
- ??????
- ???? //當(dāng)activity是單例的時(shí)候,再次啟動(dòng)該activity就不會(huì)再調(diào)用?oncreate->onstart這些方法了 ??
- ???? @Override ??
- ???? protected ? void ?onNewIntent(Intent?intent)?{??
- ???????? int ?flag?=?getIntent().getIntExtra( "flag" ,? 0 );??
- ???????? if (flag?==?SysUtil.EXIT_APPLICATION){??
- ????????????finish();??
- ????????}??
- ???????? super .onNewIntent(intent);??
- ????}??
- }??
?
第四步:新建一個(gè)Activity命名為BAcivity.java,記得要在配置文件里申明哦~代碼如下:
?
- package ?com.tutor.exit;??
- import ?android.app.Activity;??
- import ?android.os.Bundle;??
- import ?android.view.Menu;??
- import ?android.view.MenuItem;??
- import ?android.widget.TextView;??
- public ? class ?BActivity? extends ?Activity?{??
- ???? public ? static ? final ? int ?MENU_EXITAPPLICATION?=?Menu.FIRST;??
- ??????
- ???? @Override ??
- ???? protected ? void ?onCreate(Bundle?savedInstanceState)?{??
- ???????? super .onCreate(savedInstanceState);??
- ??????????
- ????????TextView?mTextView?=? new ?TextView( this );??
- ????????mTextView.setText( "Welcome?to?Frankie's?blog." );??
- ????????setContentView(mTextView);??
- ????}??
- ??????
- ???? @Override ??
- ???? public ? boolean ?onCreateOptionsMenu(Menu?menu)?{??
- ????????menu.add( 0 ,?MENU_EXITAPPLICATION,? 0 , "退出程序" );??
- ???????? return ? super .onCreateOptionsMenu(menu);??
- ????}??
- ??????
- ??????
- ???? @Override ??
- ???? public ? boolean ?onOptionsItemSelected(MenuItem?item)?{??
- ???????? if (item.getItemId()?==?MENU_EXITAPPLICATION){??
- ???????????? //其他Activity退出程序這樣調(diào)用就ok了 ??
- ????????????SysUtil?mSysUtil=? new ?SysUtil(BActivity. this );??
- ????????????mSysUtil.exit();??
- ????????}??
- ???????? return ? super .onOptionsItemSelected(item);??
- ????}??
- } ??
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
