Ⅰ android程序按HOME鍵後,重新點擊圖標是重起應用程序,而不是之前那個界面
當你按下手機的Home鍵的時候,系統會默認調用程序棧中最上層Activity的stop()方法,然後整個應用程序都會被隱藏起來,當你再次點擊手機桌面上應用程序圖標時,系統會調用最上層Activity的OnResume()方法,此時不會重新打開程序,而是直接進入,會直接顯示程序棧中最上層的Activity
不過。。。按home鍵,程序還會在後台運行,activity不會destroy,此時還是佔用系統內存的,當運行某項佔用內存的動作,內存不夠,系統會自動回收不常用的內存。你的程序在別的手機上跑時候很可能是被幹掉了。所有每次都會重新運行。。。
長按home鍵進入 與 點擊圖標進入的生命周期執行有那麼一點不一樣的。。
解決方法一、
在manifest裡面在你的程序啟動的第一個頁面的聲明裡,去掉android:launchMode="singleTask"等相關就ok了
解決方法二、
如果你必須要實現這個功能的話 可以參考下 下邊這篇文章。
http://dev.10086.cn/cmdn/wiki/index.php?edition-view-6259-1.html
思路大致就是: 按home鍵時記錄當前的activity(可以用SharedPreferences),下次執行程序的時候判斷SharedPreferences有沒有值,有的話就跳到這個activity,同時通過onSaveInstanceState 拿到之前的狀態。完成後記得把SharedPreferences弄空,不然你正常進入程序都不好使了。
PS: 法一可能有時候不好使。。。法二是我的想法,沒用過。
Ⅱ android應用程序按下HOME後隔一段時間再去進入就會報錯,請問如何防止在按下HOME後系統回收改應用的內存
系統回收內存是不可預知的。你只能通過對對象做判斷,如果被回收了直接return或程序不往下執行等操作。
Ⅲ 如何讓android程序,點擊home鍵之後,在任務欄出現,並且一直運行
notification 可以在通知欄加個圖標,
Ⅳ 如何啟動一個被home的android應用程序
Android系統的Home應用程序Launcher是由ActivityManagerService啟動的,而ActivityManagerService和PackageManagerService一樣,都是在開機時由SystemServer組件啟動的,SystemServer組件首先是啟動ePackageManagerServic,由它來負責安裝系統的應用程序,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析,系統中的應用程序安裝好了以後,SystemServer組件接下來就要通過ActivityManagerService來啟動Home應用程序Launcher了,Launcher在啟動的時候便會通過PackageManagerServic把系統中已經安裝好的應用程序以快捷圖標的形式展示在桌面上,這樣用戶就可以使用這些應用程序了,整個過程如下圖所示:
下面詳細分析每一個步驟。
Step 1. SystemServer.main
這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step 1。
Step 2.SystemServer.init1
這個函數是一個JNI方法,實現在frameworks/base/services/jni/com_android_server_SystemServer.cpp文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step 2。
Step 3.libsystem_server.system_init
函數system_init實現在libsystem_server庫中,源代碼位於frameworks/base/cmds/system_server/library/system_init.cpp文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step 3。
Step 4.AndroidRuntime.callStatic
這個函數定義在frameworks/base/core/jni/AndroidRuntime.cpp文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step 4。
Step 5.SystemServer.init2
這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step 5。
Step 6.ServerThread.run
這個函數定義在frameworks/base/services/java/com/android/server/SystemServer.java文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step 6。
Step 7. ActivityManagerService.main
這個函數定義在frameworks/base/services/java/com/android/server/am/ActivityManagerServcie.java文件中:
[java]view plain
implementsWatchdog.Monitor,BatteryStatsImpl.BatteryCallback{
......
publicstaticfinalContextmain(intfactoryTest){
AThreadthr=newAThread();
thr.start();
synchronized(thr){
while(thr.mService==null){
try{
thr.wait();
}catch(InterruptedExceptione){
}
}
}
ActivityManagerServicem=thr.mService;
mSelf=m;
ActivityThreadat=ActivityThread.systemMain();
mSystemThread=at;
Contextcontext=at.getSystemContext();
m.mContext=context;
m.mFactoryTest=factoryTest;
m.mMainStack=newActivityStack(m,context,true);
m.mBatteryStatsService.publish(context);
m.mUsageStatsService.publish(context);
synchronized(thr){
thr.mReady=true;
thr.notifyAll();
}
m.startRunning(null,null,null,null);
returncontext;
}
......
}
這個函數首先通過AThread線程對象來內部創建了一個ActivityManagerService實例,然後將這個實例保存其成員變數mService中,接著又把這個ActivityManagerService實例保存在ActivityManagerService類的靜態成員變數mSelf中,最後初始化其它成員變數,就結束了。
Step 8.PackageManagerService.main
這個函數定義在frameworks/base/services/java/com/android/server/PackageManagerService.java文件中,具體可以參考前面一篇文章Android應用程序安裝過程源代碼分析的Step 7。執行完這一步之後,系統中的應用程序的所有信息都保存在PackageManagerService中了,後面Home應用程序Launcher啟動起來後,就會把PackageManagerService中的應用程序信息取出來,然後以快捷圖標的形式展示在桌面上,後面我們將會看到這個過程。
Ⅳ 如何讓android程序,點擊home鍵之後,在任務欄出現,並且一直運行
是這樣的 安卓系統的應用程序有很多種退出方式 有些是有退出選項 有些是直接點返回鍵就退出 並且 有些軟體點擊返回後是在後台運行 這個不用管太多 如果是HOME鍵 是不會退出的 只是返回桌面 長按HOME可以調出正在運行的程序和最近幾次運行的程序
Ⅵ android手機長按home鍵時,程序還會繼續運行嗎,想把正在運行的程序暫停掉要哦怎麼辦
按home鍵,返回主界面,這個時候你之前運行的程序已經是暫停了,不需要你手工暫停.
如果你想完全中止到設置-應用程序-正在運行的服務,這里可以中止你的所有應用程序
Ⅶ android系統中home鍵調用的是什麼方法
iphone上的home鍵按一次home鍵,返回主界面。雙擊home鍵,出現後台運行程序。按電源鍵3秒後,同時按住home鍵10秒,松開電源鍵,保持home鍵15秒,進入DEF模式(越獄用)。 Android上的home鍵常見用法: 按一次返回主屏幕,或進入所有應用程序界面; 按home鍵不動,顯示最近打開的應用程序。 細節: 正在執行某應用程序的時候,當你按下手機的Home鍵的時候,系統會默認調用程序棧中最上層Activity的stop()方法,然後整個應用程序都會被隱藏起來,當你再次點擊手機桌面上該應用程序圖標時,系統會調用最上層Activity的OnResume()方法,此時不會重新打開程序,而是直接進入。會直接顯示程序棧中最上層的Activity。可是視為應用程序的「暫停」,」停止「(需要應用程序的支持)。
Ⅷ android中一個應用程序點擊home鍵後暫時退出程序,點擊原程序icon後進入程序原來的狀態,如何實現
這個問題不難!點擊home,程序退出到後台後,生命周期在onStop。
在onPause()做好數據備份。
onRestoreInstanceState(Bundle)數據恢復成活動狀態。
Ⅸ Android怎麼實現home鍵完全退出程序
需要使用BroadcastReceiver 廣播接收者,注冊HOME廣播。
創建廣播接收者
public class HomeReceiver extends BroadcastReceiver {
public void onReceive(Context context,Intent intent){
}
}
2.注冊廣播
<receiver android:name="com.xxx.xxx.HomeReceiver" >
<intent-filter>
<action android:name="android.intent.action.CLOSE_SYSTEM_DIALOGS" />
</intent-filter>
</receiver>
3.退出程序
int pid = android.os.Process.myPid(); //獲取當前應用程序的PID
android.os.Process.killProcess(pid); //結束當前進程