Android 进程保活(三)1像素方案保活

Android 进程保活(三)1像素方案保活,第1张

概述1像素保活方案坊间流传是手机QQ的保活的方案。什么意思呢?就是我们在手机锁屏时开启一个Activity,为了不让用户有感知,让这个Activity大小为1像素并设置透明无切换动画。在开启屏幕时把这个Activity关掉。一个Demo来演示一下创建一个Android工程,默认为我们生成一个MainActivity,这是

1像素保活方案坊间流传是手机QQ的保活的方案。什么意思呢?就是我们在手机锁屏时开启一个Activity,为了不让用户有感知,让这个Activity大小为1像素并设置透明无切换动画。在开启屏幕时把这个Activity关掉。

一个Demo来演示一下

创建一个AndroID工程,默认为我们生成一个MainActivity,这是我们程序的入口Activity。我们通过观察oom_adj值来看一下优先级。

首先启动App,我们看oom_adj的值

我们看oom_adj的值为0,所以当前优先级很高不会被系统杀死。
我们点击home键或者back键来观察一下oom_adj。

我们发现oom_adj的值已经变为了6,所以退到后台的app在资源紧张的情况下就有可能被杀死了。

关于oom_adj可参考:

Android 进程保活(一)写在前面

从而我们可通过提高oom_adj的值可以使我们的app被系统杀死的概率变低。

我们使用的1像素保活方案就是应用了这点。

创建一个1像素的Activity,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package com.baweigame.mvvmdemoapplication;

import androID.support.v7.app.AppCompatActivity;
import androID.os.Bundle;
import androID.util.Log;
import androID.vIEw.Gravity;
import androID.vIEw.Window;
import androID.vIEw.WindowManager;

public class extends AppCompatActivity {


protected voID onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentVIEw(R.layout.activity_one_px);

Log.d("123", "onCreate: OnePxActivity...");
createOnePxWindow();

OnePxManager.getInstance().setActivity(this);
}


* 创建1像素窗体
*/
private voID createOnePxWindow() {
Window window = getwindow();
//放在左上角
window.setGravity(Gravity.START | Gravity.top);
WindowManager.LayoutParams attributes = window.getAttributes();
//宽高为1个像素
attributes.wIDth = 1;
attributes.height = 1;

attributes.x = 0;
attributes.y = 0;
window.setAttributes(attributes);
}
}

同时为了更好的隐藏,可以给这个1像素Activity设置样式如:

1
2
3
4
5
6
<style name="OnePxStyle">
<item name="androID:windowIsTranslucent">true</item>
<item name="androID:windowBackground">@androID:color/transparent</item>
<item name="androID:windowAnimationStyle">@null</item>
<item name="androID:windowNoTitle">true</item>
</style>

即设置了背景透明及没有切换效果,这样可以更好的隐藏自己。

1
2
3
<activity androID:name=".OnePXActivity" androID:theme="@style/OnePxStyle">

</activity>

创建一个管理类来控制Activity的开启与关闭,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package com.baweigame.mvvmdemoapplication;

import androID.app.Activity;
import androID.content.Context;
import androID.content.Intent;

import java.lang.ref.WeakReference;

public class OnePxManager {
private static OnePxManager instance=new OnePxManager();
public static OnePxManager getInstance(){
return instance;

}
private OnePxManager(){}

private WeakReference<Activity> weakReference;

public voID setActivity(Activity activity){
weakReference=new WeakReference<Activity>(activity);
}

public voID startActivity(Context context){
Intent intent = new Intent(context, OnePXActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}

总结

以上是内存溢出为你收集整理的Android 进程保活(三)1像素方案保活全部内容,希望文章能够帮你解决Android 进程保活(三)1像素方案保活所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1067159.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存