学习笔记之保活技能之1像素Acitivity保活

在学习Android初中级升高级Android工程师中,记录写3中APP保活的方法。

方法1:1像素法

实现原理就是在屏幕总创建1像素透明activity,通过这个activity来实现保活。

1):创建KeepActivity并继承Activity,然后通过Window设置1像素Activity的放置位置

Window window = getWindow();
//把1寸Activity放置左上角
window.setGravity(Gravity.START | Gravity.TOP);

通过WindowManager.LayoutParams设置1像素Activity的大小

WindowManager.LayoutParams wl = window.getAttributes();
wl.width = 1;
wl.height = 1;
wl.x = 0;
wl.y = 0;

window.setAttributes(wl);
2):创建KeepManager,并实现单例模式
private static final KeepManager ourInstance = new KeepManager();

/**
 * 单例模式
 */
public static KeepManager getInstance() {
    return ourInstance;
}

public KeepManager() {

}

实现广播注册开屏、关屏和注销

/**
 * 注册 关屏和开屏
 */
public void registerKeep(Context context) {
    IntentFilter filter = new IntentFilter();
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    filter.addAction(Intent.ACTION_SCREEN_ON);
    keepReceiver = new KeepReceiver();
    context.registerReceiver(keepReceiver, filter);
}

/**
 * 注销
 */
public void unregisterKeep(Context context) {
    if (keepReceiver != null) {
        context.unregisterReceiver(keepReceiver);
    }
}

实现1像素Activity的绑定和注销方法

/**
 * 开启 1px Acitivity
 */
public void startKeep(Context context) {
    Intent intent = new Intent(context, KeepActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}

/**
 * 注销 1px Activity
 */
public void finishKeep() {
    if (mKeepAct != null) {
        Activity activity = mKeepAct.get();
        if (activity != null) {
            activity.finish();
        }
        mKeepAct = null;
    }
}

3):创建KeepReceiver广播,并实现开关屏是的处理逻辑

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

} else if (TextUtils.equals(action, Intent.ACTION_SCREEN_ON)) {
    //开屏
    KeepManager.getInstance().finishKeep();
}

4)在KeepManager中实现弱引用绑定

private static WeakReference<Activity> mKeepAct;
/**
 * 绑定弱引用
 */
public void setKeep(KeepActivity keep) {
    mKeepAct = new WeakReference<Activity>(keep);
}

5)最后在MainActivity中启用

//通过 1pxActivity 进行提权
KeepManager.getInstance().registerKeep(this);
@Override
protected void onDestroy() {
    super.onDestroy();
    KeepManager.getInstance().unregisterKeep(this);
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章