androidpersistent
❶ 如何實現android清理後台時,自己的軟體不被清理
在配置文件AndroidManifest.xml應用的application節點添加android:persistent=」true」,保證該應用程序所在進程不會被LMK殺死。提高軟體運行的優先順序。註:只設置android:persistent=」true」仍然會被殺死的情況。
在activity的 onStop()執行時,啟用一個像素的懸浮窗防止應用被清理,代碼如下:
Button button = new Button(getApplicationContext());
WindowManager wm = (WindowManager) getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams wmParams = new WindowManager.LayoutParams();
/**
* 以下都是WindowManager.LayoutParams的相關屬性 具體用途請參考SDK文檔
*/
wmParams.type = LayoutParams.TYPE_PHONE; // 這里是關鍵,你也可以試試2003
wmParams.format = PixelFormat.RGBA_8888; // 設置圖片格式,效果為背景透明
/**
* 這里的flags也很關鍵 代碼實際是wmParams.flags |=FLAG_NOT_FOCUSABLE;
* 40的由來是wmParams的默認屬性(32)+ FLAG_NOT_FOCUSABLE(8)
*/
wmParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE
| LayoutParams.FLAG_NOT_TOUCHABLE;
wmParams.width = 1;
wmParams.height = 1;
wm.addView(button, wmParams); // 創建View
❷ 關於APP進程被殺死,極光推送收不到消息的解決辦法
推送是每一個APP必不可少的一部分,這幾天正好在做這一塊,所以總結一下遇到的一些問題。在APP被殺死的情況下,對應的推送service也一起被殺死了,這個時候我們怎麼能夠收到後台的推送呢?
解決辦法很簡單,但是也特別粗暴,在mainfest中給application設置這個屬性android:persistent="true",看意思我們就知道,持續的,一直的,這樣的話,app是殺不死的,推送肯定有可以收到了。但是強烈建議不要這樣做,因為這樣就像某些流氓軟體一樣了,畢竟我們做個應用出來,也不想讓別人以為我們的是流氓軟體吧。好了,重頭戲來了,最後一種方法,也是我比較推薦的一種。用Broadcast Receivers。我們都知道,推送實際上應用的就是廣播,這里我們自定義一個廣播接收器,讓它繼承系統的Broadcast Receivers,然後復寫它的onReceive方法,在onReceive裡面開啟推送的服務。最後在mainfest中去注冊我們自定義的廣播接收器。這里一定要用靜態注冊的廣播接收器。如果是動態注冊的,APP被殺死後,廣播接收器也會被殺死。下面我已極光推送為例。