Android殺死app
㈠ android app先後台再殺掉 和直接殺掉的區別
Android上殺掉進程的方式有兩種,分別是System.exit(0)和Process.killProcess(Process.myPid()),那麼這兩種方式有何區別呢?相同點APP進程都會被直接殺掉我們通過adbshellps可以查看當前手機所有運行的進程狀態,在執行完這兩種方式之後,APP進程都會消失。生命周期都不會被調用onPause()、onStop()和onDestory(),也包括onSaveInstanceState,這些生命周期方法都不會被調用。不同點影響范圍不同System.exit(0)只會影響當前的程序;Process.killProcess(Process.myPid())會殺掉所有PID一樣的進程,比如那些擁有相同UID的應用,統統都會被殺掉。方式不一樣System.exit(0)是停止程序的虛擬機;Process.killProcess(Process.myPid())是通過PID去殺死進程。補充System.exit(0)和System.exit(1)看官方的方法注釋,如下:.110:代表成功的信號;1:代表失敗的信號,常用於捕獲到異常執行。使用方式從上面可以看出,這兩種方式都比較暴力,不推薦使用,尤其是現在的手機配置都很好的情況下。而且進程都被殺掉了,相應的Service也會被幹掉,如果存在推送的話,會出現各種莫名的問題。真要用的話,也得注意:如果程序有多個Activity,最好在主Activity中的OnBackPressed()中使用,如果在其它Activity中使用的話,APP會直接退出,退出後會重啟應用,這樣對於用戶體驗不是很好。
㈡ Android APP在後台被殺問題修復
目前項目採用單 Activity 模式,頁面採用 Jetpack Navigation 導航
布局如下:Splash -> Home -> Detail
不做任何事情
持有 LiveData 類型變數 hasSDKInit,根據SDK初始化成功與否設置 true 或者 false
調用 SDK 實現相關功能。
很明顯,被殺後與 Activity 生命周期關聯的 ViewModel 也結束了,與新打開 APP 的區別是,這時候是沒有通過 Splash 去 初始化 SDK 的, Home 直接調用一個沒有初始化的SDK 實例當然就報錯了。
這樣我們把 SDK 的初始化挪到 Activity::onCreate 就行了。
Fragment 中通過``ViewModelProvider(requireActivity()).get(GlobalViewModel::class.java)`獲取。
把 init SDK 放到 ViewModel 的構造函數中,並將 initSDK 方法私有化,不允許從外部調用
context 通過新建 ViewModelFactory 類傳入。
Google 官方不推薦 ViewModel 持有任何形式的 Context,如果確實要用,可以考慮單例或者 AndroidViewModel
Splash 頁面監聽 hasSDKInit 邏輯不變。
Home 頁面原有邏輯不變,必要時加上對 hasSDKInit 的監聽,true 才可進行後續操作。
而,如果SDK 的 init 不依賴網路等其他因素,默認情況下因為所有調用都在主線程,那麼 就不用做監聽。
㈢ android 怎麼關閉app
你可以進入應用管理然後選擇正在運行就可以徹底關閉APP。也可以按住home鍵會彈出正在運行的程序,然後劃掉它。
㈣ Android進程管理篇(二)-進程查殺方式總結
本篇文章簡單總結一下Android系統查殺進程的方式。
註:AMS對應的應用層調用方法在ActivityManager中,通過如下方法獲取ActivityManager來調用:
2.1 查殺方法:
調用AMS forceStopPackageLocked(final String packageName, int uid, String reason)
2.2 查殺條件:
除此之外,以下情況則必然會成為被殺進程:
進程的pkgList是在啟動組件或者創建進程的過程向該隊列添加的,代表的是該應用下有組件運行在該進程。那麼pkgDeps是指該進程所依賴的包名,調用ClassLoader的過程添加。
2.3 查殺過程:
當app被force-stop後,90%保活策略都會失效:
參考:
http://gityuan.com/2016/10/22/force-stop/
系列文章:
Android進程管理篇(一)-應用進程啟動過程
Android進程管理篇(二)-進程查殺方式總結
Android進程管理篇(三)-AMS進程調度
lowmemorykiller總結
㈤ 安卓如何刪除app軟體
長按你想要卸載的軟體,找到並點擊卸載(或者點擊右上的一個小叉),即可卸載
㈥ Android應用 如何關閉另一個應用
1、am.killBackgroundProcesses(String packageName);
這個方法只能停止在後台的應用,如果應用在前台就不能用。
2、andorid.os.Process.killProcess(int pid);
這個方法對於前台應用同樣沒用,因為的我需求時殺死前台的app所以沒有測試後台是否能夠殺死,但是這個用來大范圍的殺死後台進程是比較好用的:
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> infos = am.getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo info:infos) {
if (info.processName.equals(MainActivity.packageName)){
android.os.Process.killProcess(info.pid);
}