?
大家好,好久不見了,我們在開發一個android應用時,有可能有N個Activity,而在每個Activity里的菜單里有個"退出程序"菜單,這里就要完全退出程序了,所以今天給大家分享的是Android應用開發完全退出程序的通用方法,以前我在網上收了幾種方法,但都不能通用,比如:任務管理器方法(ActivityManager):
首先要說明該方法運行在Android 1.5 - 2.1 才可以(不過蠻好用的撒!),2.2以后就不行了,同時需要加如下權限:
?
- <uses-permission?android:name= "android.permission.RESTART_PACKAGES" ?/>??
?
用法只有如下兩行代碼:
?
- ActivityManager?am?=?(ActivityManager)getSystemService?(Context.ACTIVITY_SERVICE);??
- am.restartPackage( "packagename" );??
?
上面要是2.2以后能通用就非常完美了,可是結果你懂得。。。
所以為了通用想到了另外一種方法,就是當我們點擊“退出程序”菜單時,可以從當前Activity跳轉到主Activity(就是我們打開程序最先啟動的那個Activity),通過Intent告訴主Activity我要退出程序,然后主Activity調用finish()方法即可。由于這一過程很短暫,以致于我們沒觀察到Activity有任何切換就退出程序了!
同樣為了讓大家更容易理解,我做了一個Demo.為了省事,程序運行時我直接就從MainActivity跳轉到BActivity,在BActivity有個“退出程序”菜單,點擊會退出程序。具體過程如下:
首先第一步:新建一個Android工程,命名為ExitDemo(目錄結構圖如下)
第二步:定義一個工具類Sysutil用來退出程序,這樣定義好處可以在多個Activity的時候復用,代碼如下:
?
- 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;??
- ????}??
- ??????
- ???? //完全退出應用 ??
- ???? 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 );??
- ???????? //這里設置flag還是比較?重要的 ??
- ????????mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);??
- ???????? //發出退出程序指示 ??
- ????????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);???????
- ????}??
- ??????
- ??? //這里用來接受退出程序的指令? ??
- ???? @Override ??
- ???? protected ? void ?onStart()?{??
- ???????? int ?flag?=?getIntent().getIntExtra( "flag" ,? 0 );??
- ???????? if (flag?==?SysUtil.EXIT_APPLICATION){??
- ????????????finish();??
- ????????}??
- ???????? super .onResume();??
- ??????????
- ????}??
- ???? //程序啟動后就進入了BActivity ??
- ???? @Override ??
- ???? protected ? void ?onResume()?{??
- ????????Intent?mIntent?=? new ?Intent();??
- ????????mIntent.setClass( this ,?BActivity. class );??
- ????????startActivity(mIntent);??
- ???????? super .onStart();??
- ????}??
- ??????
- ??????
- ???? //當activity是單例的時候,再次啟動該activity就不會再調用?oncreate->onstart這些方法了 ??
- ???? @Override ??
- ???? protected ? void ?onNewIntent(Intent?intent)?{??
- ???????? int ?flag?=?getIntent().getIntExtra( "flag" ,? 0 );??
- ???????? if (flag?==?SysUtil.EXIT_APPLICATION){??
- ????????????finish();??
- ????????}??
- ???????? super .onNewIntent(intent);??
- ????}??
- }??
?
第四步:新建一個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退出程序這樣調用就ok了 ??
- ????????????SysUtil?mSysUtil=? new ?SysUtil(BActivity. this );??
- ????????????mSysUtil.exit();??
- ????????}??
- ???????? return ? super .onOptionsItemSelected(item);??
- ????}??
- } ??
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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