一、1 像素 Activity 提高进程优先级
使用 Activity 可以提升进程的 oom_adj 值 ;
APP 进入后台后 , 使用 BroadcastReceiver 广播接收者 , 监听 Android 系统的锁屏广播事件 ;
屏幕锁定 : 启动只有 1 1 1 像素的透明 Activity 界面 ;
屏幕解锁 : 退出上述 1 1 1 像素的透明 Activity 界面 ;
1、主界面 MainActivity
主界面 , 主要负责注册广播接收者 ;
package kim.hsl.keep_progress_alive;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 注册广播接收者
KeepProgressAliveManager.getmInstance().registerReceiver(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
// 取消注册广播接收者, 也可以不取消注册
//KeepProgressAliveManager.getmInstance().registerReceiver(this);
}
}
2、1 像素 Activity
在锁屏时 , 弹出的 1 像素 Activity , 有可能有进程保活的同行 , 也弹出个同样类型的 Activity , 一般都是透明的 , 即使这样 , 最次也是个可见进程 ;
package kim.hsl.keep_progress_alive;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.Window;
import android.view.WindowManager;
import androidx.annotation.Nullable;
/**
* 只有 1 像素的 Activity
*/
public class OnePixelActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("OnePixelActivity", "onCreate");
// 获取本界面的窗口 Window 对象
Window window = getWindow();
// 屏幕左上角展示
window.setGravity(Gravity.LEFT | Gravity.TOP);
// 将 Activity 设置成 1 像素
WindowManager.LayoutParams layoutParams = window.getAttributes();
// 宽高都设置 1 像素
layoutParams.width = 1;
layoutParams.height = 1;
// 放置位置 (0, 0) 坐标开始放置
layoutParams.x = 0;
layoutParams.y = 0;
// 在将布局参数设置会 Window 对象中
window.setAttributes(layoutParams);
// 设置界面到 KeepProgressAliveManager 单例对象中 , 用于关闭界面
KeepProgressAliveManager.getmInstance().setmOnePixelActivity(this);
}
@Overri