Android 通過設(shè)置1一個像素點來保活進(jìn)程

  • ?;罘绞?/li>
  1. 原理: 創(chuàng)建一個像素點的activity,通過廣播監(jiān)聽關(guān)屏?xí)r打開 , 開屏?xí)r移出 這activity 因此來達(dá)到降低 oom_obj的值來進(jìn)行?;?/li>

像素點KeepActivity

package com.example.amn.amnimageload.activity;

import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;

/**
 * Created by Amn on 2019/4/20.
 */

public class KeepActivity extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Window window= getWindow();
        //設(shè)置activity 左上角
        window.setGravity(Gravity.START | Gravity.TOP);
        // 創(chuàng)建寬高都 是 1 像素
        WindowManager.LayoutParams attributes = window.getAttributes();
        attributes.width=1;
        attributes.height=1;
        attributes.x=0;
        attributes.y=0;
        window.setAttributes(attributes);

        //設(shè)置弱引用
        KeepManager.getInstance().setKeep(this);

    }
}

廣播監(jiān)聽關(guān)屏還是息屏 KeepReceive


package com.example.amn.amnimageload.activity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.text.TextUtils;

/**
 * Created by Amn on 2019/4/20.
 */

public class KeepReceive extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        String action= intent.getAction();
        //息屏
        if(TextUtils.equals(action,intent.ACTION_SCREEN_OFF)){
            KeepManager.getInstance().startKeep(context);

        }else if(TextUtils.equals(action,intent.ACTION_SCREEN_OFF)){
            //開屏
            KeepManager.getInstance().finishKeep();
        }
    }
}

管理廣播的注冊 反注冊,開啟像素activity 的管理類 KeepManager

package com.example.amn.amnimageload.activity;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

import java.lang.annotation.Retention;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;

/**
 * Created by Amn on 2019/4/20.
 */

public class KeepManager {

    private  static KeepManager instance=new KeepManager();

    public static  KeepManager getInstance(){
        return instance;
    }


    private KeepManager(){

    }

    private  KeepReceive keepReceive;

    private WeakReference<Activity> mActivity;

    /**
     * 注冊關(guān)屏   開屏
     */

    public void registerKeep(Context context){

        IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
        intentFilter.addAction(Intent.ACTION_SCREEN_ON);
        keepReceive=new KeepReceive();
        context.registerReceiver(keepReceive,intentFilter);
    }


    /**
     * 注銷廣播
     */

    public void unregisterKeep(Context context){
        if(null != keepReceive){
            context.unregisterReceiver(keepReceive);
        }
    }


    /**
     * 開啟1像素的activity
     *
     */

    public void startKeep(Context context){
        Intent intent=new Intent(context,KeepActivity.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(intent);
    }

    /**
     * 關(guān)閉activity
     */
    public  void  finishKeep(){
        if(null != mActivity){
            Activity activity= mActivity.get();
            if(null != activity){
                activity.finish();
            }
            mActivity =null;
        }
    }

    //綁定弱引用
    public  void setKeep(KeepActivity activity){
        mActivity=new WeakReference<Activity>(activity);
    }
}

Manifest配置

        <activity android:name=".activity.KeepActivity"
            android:excludeFromRecents="true"
            android:taskAffinity="com.example.amn.amnimageload"
            android:theme="@style/KeepTheme"
            ></activity>

在activity 使用

package com.example.amn.amnimageload;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.example.amn.amnimageload.activity.KeepManager;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //通過 1 像素acticitity 提升優(yōu)先級
        KeepManager.getInstance().registerKeep(this);
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        KeepManager.getInstance().unregisterKeep(this);
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容