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