Android中1像素Activity进程保活
生活随笔
收集整理的這篇文章主要介紹了
Android中1像素Activity进程保活
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
背景
Android8.0馬上就要發布,Google對于安卓市場上各種應用占據內存空間的問題不斷進行內存完善,我們的應用進程很難再保持不死之身,以前的服務喚醒在5.0已經失效,現在我們盡可能的做到保活方式就是提高進程的優先級,本文介紹一種1像素Activity保活進程的實現(據說QQ也在用)。
其整個邏輯就是在手機屏幕黑屏時,我們啟動一個1像素的Activity,其占用內存很小畢竟只有1像素嘛,無形中減小了內存的回收幾率,在屏幕亮的時候就關閉該頁面。
實現步驟
1、首先需要在MainActivity中注冊一個監聽手機屏幕狀態的廣播監聽:
//注冊監聽屏幕的廣播mOnepxReceiver = new OnePixelReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.intent.action.SCREEN_OFF"); intentFilter.addAction("android.intent.action.SCREEN_ON"); intentFilter.addAction("android.intent.action.USER_PRESENT"); registerReceiver(mOnepxReceiver, intentFilter);2、監聽到屏幕狀態后的處理:
/*** Created by Administrator on 2017/7/10.* 監聽屏幕狀態的廣播*/ public class OnePixelReceiver extends BroadcastReceiver {public void onReceive(Context context, Intent intent) {if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { //屏幕關閉啟動1像素ActivityIntent it = new Intent(context, OnePiexlActivity.class);it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(it);} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { //屏幕打開 結束1像素context.sendBroadcast(new Intent("finish"));Intent main = new Intent(Intent.ACTION_MAIN);main.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);main.addCategory(Intent.CATEGORY_HOME);context.startActivity(main);}} }3、創建我們的1像素的Activity:
/*** Created by Administrator on 2017/7/10.*/ public class OnePiexlActivity extends Activity {private BroadcastReceiver endReceiver;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//設置1像素Window window = getWindow();window.setGravity(Gravity.LEFT | Gravity.TOP);WindowManager.LayoutParams params = window.getAttributes();params.x = 0;params.y = 0;params.height = 1;params.width = 1;window.setAttributes(params);//結束該頁面的廣播endReceiver = new BroadcastReceiver() {public void onReceive(Context context, Intent intent) {finish();}};registerReceiver(endReceiver, new IntentFilter("finish"));//檢查屏幕狀態checkScreen();}protected void onResume() {super.onResume();checkScreen();}/*** 檢查屏幕狀態 isScreenOn為true 屏幕“亮”結束該Activity */private void checkScreen() {PowerManager pm = (PowerManager) OnePiexlActivity.this.getSystemService(Context.POWER_SERVICE);boolean isScreenOn = pm.isScreenOn();if (isScreenOn) {finish();}} }4、我們還需要設置1像素activity為透明,不然可能會影響體驗,但是影響不大,1像素畢竟是挑戰視力的存在。
<style name="OnePixelActivity" parent="android:Theme.Holo.Light.NoActionBar">//無標題<item name="android:windowIsTranslucent">true</item>//透明</style>5、AndroidManifest配置
<activityandroid:name=".OnePiexlActivity"android:screenOrientation="portrait"android:theme="@style/OnePixelActivity"/>總結
以上為1像素保活進程的基本實現,另外保活進程還可以通過啟動前臺service和提升service優先級來實現。
作者:將行陌路
鏈接:https://www.jianshu.com/p/ef4a9531bc15
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的Android中1像素Activity进程保活的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webm是什么格式?
- 下一篇: Android 微信分享