标签:oom 保活 像素 Activity import Android adj android
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); }
大专栏 |
标签:oom,保活,像素,Activity,import,Android,adj,android
来源: https://www.cnblogs.com/liuzhongrong/p/12407703.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。