androidactivity退出
㈠ android 面試4: 如何退出Activity如何安全退出已調用多個Activity的Application
當然,也可以用killProcess()和System.exit()這樣的方法。 現提供幾個方法,供參考: 1、拋異常強制退出: 該方法通過拋異常,使程序Force Close。 驗證可以,但是,需要解決的問題是,如何使程序結束掉,而不彈出Force Close的窗口。 2、記錄打開的Activity: 每打開一個Activity,就記錄下來。在需要退出時,關閉每一個Activity即可。 3、發送特定廣播: 在需要結束應用時,發送一個特定的廣播,每個Activity收到廣播後,關閉即可。 4、遞歸退出 在打開新的Activity時使用startActivityForResult,然後自己加標志,在onActivityResult中處理,遞歸關閉。 除了第一個,都是想辦法把每一個Activity都結束掉,間接達到目的。 但是這樣做同樣不完美。 你會發現,如果自己的應用程序對每一個Activity都設置了nosensor,在兩個Activity結束的間隙,sensor可能有效了。 但至少,我們的目的達到了,而且沒有影響用戶使用。
㈡ Android Activity退出為啥要按兩次返回鍵呢
這個是你的程序裡面AndroidMainfest.xml裡面A對應的Activity的配置的屬性決定的。你可能沒有配置A這個Activity的launchMode這個屬性,或者你配置的是默認屬性值standard。你修改這個屬性為singletop或者singletask試試。
網路一下launchMode,仔細看下你就明白了。
㈢ Android開發怎樣徹底退出APP我有兩個activity,在第一個activity中用system.exit(0)可以
你在第一個activity里用exit退出,只是結束了當前頁面而已,當你在第一個頁面exit因為只有一個頁面,所以可以,當有兩個以上頁面是,結束了第二個頁面就會跳到第一個頁面去,不能徹底退出。解決辦法:在配置文件里把最後你要退出的那個頁面的launchMode設置為singleTask,例如你上面說的第二個activity,你要退出的時候,直接在第二個activity里finish()就可以了。
㈣ android 從一個activity跳轉到另一個activity後在跳轉回來,為什麼就退出不了程序
activity是棧的方式存儲的,當你跳到第二個activity時,第一個被push到棧中,第二個activity中的back事件沒有處理的話,默認是pop第一個棧,也就是返回第一個activity。這個時候,你再back才是執行第一個activity中的你定義的back事件——退出。
㈤ Android 應用退出的幾種方法
android退出運用,主要有3種常用方案。
分別是:
殺進程,暴力退出app。
系統退出,強制性退出。
activity管理(棧),合理性退出。
【主要原理】
主要是通過通知系統殺死運用,或者移除所有的界面資源達到退出運用的目的。
【詳細實現】
殺進程,暴力退出app。
優缺點:暴力,但是容易丟失數據,可能會引起不必要的問題。
代碼如下:
android.os.Process.killProcess(android.os.Process.myPid());
系統退出,強制性退出。
優缺點:相對第一種方法溫和點,謹慎使用。
代碼如下:
System.exit(0);
activity管理(棧),合理性退出。
優缺點:推薦使用,一個個移除apk打開的所有資源,達到退出apk的目的。
代碼如下:
public class ScreenManager {
private static Stack<Activity> activityStack;
private static ScreenManager instance;
private ScreenManager(){
}
public static ScreenManager getScreenManager(){
if(instance==null){
instance=new ScreenManager();
}
return instance;
}
//退出棧頂Activity
public void popActivity(Activity activity){
if(activity!=null){
activity.finish();
activityStack.remove(activity);
activity=null;
}
}
//獲得當前棧頂Activity
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
//將當前Activity推入棧中
public void pushActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
//退出棧中所有Activity
public void popAllActivityExceptOne(Class cls){
while(true){
Activity activity=currentActivity();
if(activity==null){
break;
}
if(activity.getClass().equals(cls) ){
break;
}
popActivity(activity);
}
}
}
【最後】
推薦使用第三種方案,方便管理退出。
㈥ android 中怎樣能夠清除activity堆棧,也就是退出整個應用
如果退出整個程序,如下操作:方式一:Intent intent=new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);this.startActivity(intent);System.exit(0); 方式二:android.os.Process.killProcess(android.os.Process.myPid()); android 完全退出程序有幾個activity,有一需求是在一個activityA點擊back鍵退出系統而不是跳到之前的activity首先想到的是清空activityA的堆棧,使用intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 但是該activityA不是已經存在於堆棧底端的,所以清除的只是堆棧中該activityA上面的activity,但後退後還是會返回堆棧中該activityA下面的activity。
㈦ Android Activity的關閉問題
你說的閃屏的activity是啟動的廣告頁?首先要保證你按返回就退出的app是在棧的底部,這樣在這個頁面調finish();就會直接完全的退出app,可以通過activity的啟動模式來控制,這個你查一下就會很清楚的,我這里簡單說一下:
1.在清單文件中,<Activity>標簽中加入android:launchMode = ""這個屬性,控制啟動模式,或者java文件中也可以,不過不太一樣。
standard: 默認模式 可以實例化多次,每次都會創建一個新的實例
singleTop:可以實例化多次,但是棧頂只能出現一個
singleTask:只能創建一個Activity的實例
singleInstance:當啟動這種模式的Activity時,系統會分配一個新的任務task,並把Activity的實例放到棧的底部,他不允許其他的實例和它共享一個棧
2.在Activity中通過Intent對象來設置,優先順序高於xml文件中的設置:
FLAG_ACTIVITY_SINGLE_TOP 等同於 singleTop
FLAG_ACTIVITY_CLEAR_TOP 同singleTask 相似,當棧中存在要啟動的Activity實例,首先會把在它之上的實例移除,並且銷毀,然後銷毀當前的Activity實例,重寫創建新的實例
FLAG_ACTIVITY_NEW_TASK
必須在<Activity>添加屬性android:taskAffinity="com.other" 包名 android:alwaysRetainTaskState="true"只有設置了這兩個屬性,系統才會為當前實例創建新的任務,並放到棧的底部
㈧ Android 怎麼退出整個應用程式
Android 怎麼退出整個應用程式
在Android中,Activity有個棧,一個Activity結信談束掉,會回到上一個Activity,並不是退出應用程式。
Android中,退出應用程式的方式:
通過pid
int pid = android.os.Process.myPid(); 獲取當前應用程式的PID
android.os.Process.killProcess(pid); 殺死當前程序
這種方法退出應用,是會保留某些後進程,例如:Service,Notifications等。
2.通過ActivityManager
ActivityManager manager = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE); 獲取應用程式管理器
manager.killBackgroundProcesses(getPackageName()); 強制結束當前應用程式
這種方式退出應用,會結束本應用程式的一切活動,因為本方法會根據應用程式的包名殺死所有程序包括Activity,Service,Notifications等。
呼叫System.exit(0);
其實還有一種方法也不錯,把MainActivity設定為singleTop,先跳轉到MainActivity然後finish就行,不過要注意停掉相應的Service
大家都知道 Android 的 Activity 是存著歷史棧的,比如從 A -> B -> C,C 完成 finish 後喊森回到 B,把所有的Activity 都 finish了,程式就自然退出了。 當然在 finish 的同時也需要是否自己程式的其他資源。所以需要想個辦法把 Activity 給存起來。然後在程式退出的地方呼叫它們的 finish()鄭坦畝方法。
使用全域性變數。對了,第一個想到的就是繼承 Application,程式碼入下。
public class AgentApplication extends Application { private List<Activity> activities = new ArrayList<Activity>(); public void addActivity(Activity activity) {activities.add(activity);} @Overridepublic void onTerminate() {super.onTerminate();for (Activity activity : activities) {activity.finish();}onDestroy();System.exit(0);}}
然後在 Activity onCreate 的時候來呼叫 addActivity (),有人可能想到這個Application需要在所有的 Activity onCreate的時候都使用,需要做一個單例例項。其實根本不需要。在 Activity 中使用 this.getApplication() 就可以了。
最後在你需要推出程式的地方呼叫 application.onTerminate() 就可以了。記住:super.onTerminate() 必須呼叫,程式碼中的 onDestroy()是我自己的釋放其他資源的方法,不是系統的。
執行以上程式碼後,在LogCat 中會出現一行提示:
Process 包名 (pid xxxxx) has died. 證明你的程式退出了。現在你可以測試了。
有幾種方法,一種是:程式退出時,下方有寫 在按一次退出程式
第二種,進 設定-應用程式-正在執行 這一欄自己關
有時跳轉的activity較多時,還需要多次按返回鍵,這樣感覺一點都不爽。 後面添加了一個選單返回功能鍵,這個方法也只能用system.exit(0)來關閉當前活動的Activity,附程式碼: public boolean onCreateOptionsMenu(Menu menu){super.onCreateOptionsMenu(menu); MenuItem item = menu.add(Menu.NONE, Menu.NONE, Menu.NONE, "Exit"); item.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){public boolean onMenuItemClick(MenuItem item){System.exit(0); return true;}});return true;}想到這樣太不方便了,每次退出介面之後應用程式還在執行,今天查了下資料終於把這個問題給解決了, 網上提供了幾種方法,我吸收了下面這個自認為簡單易懂的方法,將下面SysApplication這個類復制到工程裡面,然後在每個Acitivity的oncreate方法裡面通過SysApplication.getInstance().addActivity(this);添加當前Acitivity到ancivitylist裡面去,最後在想退出的時候呼叫SysApplication.getInstance().exit();可直接關閉所有的Acitivity並退出應用程式。 附程式碼:import java.util.LinkedList; import java.util.List; import android.app.Activity; import android.app.AlertDialog; import android.app.Application; import android.content.DialogInterface; import android.content.Intent; public class SysApplication extends Application { private List mList = new LinkedList(); private static SysApplication instance; private SysApplication() { } public synchronized static SysApplication getInstance() { if (null == instance) { instance = new SysApplication(); } return instance; } add Activity public void addActivity(Activity activity) { mList.add(activity); } public void exit() { try { for (Activity activity : mList) { if (activity != null) activity.finish(); } } catch (Exception e) { e.printStackTrace(); } finally { System.exit(0); } } public void onLowMemory() { super.onLowMemory(); System.gc(); } } 在應用程式裡面 的activity的oncreate裡面新增SysApplication.getInstance().addActivity(this)如:public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);
你可以長按主屏鍵後,在其中關閉應用程式。但並不能完全退出執行記憶體