Android中1像素Activity进程保活
生活随笔
收集整理的這篇文章主要介紹了
Android中1像素Activity进程保活
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
背景
Android8.0馬上就要發(fā)布,Google對于安卓市場上各種應用占據(jù)內(nèi)存空間的問題不斷進行內(nèi)存完善,我們的應用進程很難再保持不死之身,以前的服務喚醒在5.0已經(jīng)失效,現(xiàn)在我們盡可能的做到保活方式就是提高進程的優(yōu)先級,本文介紹一種1像素Activity保活進程的實現(xiàn)(據(jù)說QQ也在用)。
其整個邏輯就是在手機屏幕黑屏時,我們啟動一個1像素的Activity,其占用內(nèi)存很小畢竟只有1像素嘛,無形中減小了內(nèi)存的回收幾率,在屏幕亮的時候就關(guān)閉該頁面。
實現(xiàn)步驟
1、首先需要在MainActivity中注冊一個監(jiān)聽手機屏幕狀態(tài)的廣播監(jiān)聽:
//注冊監(jiān)聽屏幕的廣播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、監(jiān)聽到屏幕狀態(tài)后的處理:
/*** Created by Administrator on 2017/7/10.* 監(jiān)聽屏幕狀態(tài)的廣播*/ public class OnePixelReceiver extends BroadcastReceiver {public void onReceive(Context context, Intent intent) {if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { //屏幕關(guān)閉啟動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)) { //屏幕打開 結(jié)束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、創(chuàng)建我們的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);//結(jié)束該頁面的廣播endReceiver = new BroadcastReceiver() {public void onReceive(Context context, Intent intent) {finish();}};registerReceiver(endReceiver, new IntentFilter("finish"));//檢查屏幕狀態(tài)checkScreen();}protected void onResume() {super.onResume();checkScreen();}/*** 檢查屏幕狀態(tài) isScreenOn為true 屏幕“亮”結(jié)束該Activity */private void checkScreen() {PowerManager pm = (PowerManager) OnePiexlActivity.this.getSystemService(Context.POWER_SERVICE);boolean isScreenOn = pm.isScreenOn();if (isScreenOn) {finish();}} }4、我們還需要設置1像素activity為透明,不然可能會影響體驗,但是影響不大,1像素畢竟是挑戰(zhàn)視力的存在。
<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"/>總結(jié)
以上為1像素保活進程的基本實現(xiàn),另外保活進程還可以通過啟動前臺service和提升service優(yōu)先級來實現(xiàn)。
作者:將行陌路
鏈接:https://www.jianshu.com/p/ef4a9531bc15
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
總結(jié)
以上是生活随笔為你收集整理的Android中1像素Activity进程保活的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webm是什么格式?
- 下一篇: Android 微信分享