學習筆記之保活技能之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);
}

 

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