編輯:關於android開發
轉載博客:http://blog.sina.cn/dpool/blog/s/blog_5de73d0b0102vpai.html?utm_source=bshare&utm_campaign=bshare&utm_medium=weixin&bsh_bid=883565991
類似QQ、微信這樣的APP,一般都不會打開兩個實例。
比如:打開QQ客戶端,進入到好友聊天界面,然後按HOME返回桌面
這時候有兩種情況:
1、如果你在最近任務中切換會QQ客戶端,那麼還是顯示好友聊天界面
2、如果點擊QQ客戶端圖標打開,依然顯示好友聊天界面
默認情況下是不可能實現上面的功能的。
但是,使用android:alwaysRetainTaskState='true',可以實現我們的需求。
我們要做的是:
在Androidmanifest.xml文件中,給根Activity加上android:alwaysRetainTaskState='true',就可以了。
根Activity就是應用默認啟動的Activity,一般是歡迎頁面SplashActivity或主頁面MainActivity。
如下圖所示:
簡單解釋一下:
android:alwaysRetainTaskState顧名思義就是【總是保留任務棧狀態】
Task指的是任務棧,是用於記錄Activity打開順序、保存狀態等。
如上圖,打開客戶端的順序是 SplashActivity --> GuideActivity --> MainActivity
(歡迎頁面 --> 功能引導頁面 --> 主頁面)
那麼,它在任務棧中就是,
由於我們在Androidmanifest.xml文件中,給SplashActivity設置android:alwaysRetainTaskState='true',當我們按HOME鍵返回桌面,任務棧的狀態被保留著,當我們點擊應用圖標打開再次應用時,系統會判斷是否已經存在以SplashActivity為根Activity的棧,如果有,那麼就直接使用該棧,並顯示棧頂的Activity。注意,只需要設置根Activity就可以了。
最近發現了一個方法,
它就是Activity.moveTaskToBack(boolean),這個方法可以把整個任務棧放到後台運行,相當於PC窗口的最小化一樣!十分強大!一般來說,為了保證應用在後台運行,提高再次打開的速度,一般都不會直接finish(),(可以參考一下QQ、微信、微博這些長駐留應用)為了實現這個功能,比較通用的做法是在用戶按下返回鍵的時候,調用如下代碼實現:
@Override public void onBackPressed() { //按返回鍵返回桌面 Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); }
這個方法雖然可以實現我們所需功能,但是,如果有用戶安裝了多個桌面應用的時候,可能會提出對話框,要求用戶選擇一個桌面運行。但是,如果把代碼改成這樣:
@Override public void onBackPressed() { //按返回鍵返回桌面 moveTaskToBack(true); }
就不會出現上述問題了!!其它,QQ也是用這種方式實現的。有一點細微的差別。前者會返回桌面的默認頁面,後者返回桌面上次停留的頁面。
ListView和Adapter的配合使用以及Adapter的重寫,listviewadapterListView和Adapter的使用 首先介紹一下L
[android] 手機衛士來電顯示號碼歸屬地,android來電顯示繼續N天前的項目 開啟服務監聽手機來電,查詢數據庫,顯示歸屬地 詳細內容可以參考這篇博文:http:
Android程序apk反編譯破解方法,androidapk簡短不割了,我們直接奔主題吧。 把apktool-install-windows-r05-ibot文件裡的兩個
android:listview實現qq,微信好友列表(頭像,昵稱,個性簽名) 首先附上運行結果: 如果你沒有學過listview請你先看一看基本知識。不想再說的那