1像素Activity进程保活
来源:互联网 发布:斑马二维码打印软件 编辑:程序博客网 时间:2024/05/17 23:31
Android8.0马上就要发布,Google对于安卓市场上各种应用占据内存空间的问题不断进行内存完善,我们的应用进程很难再保持不死之身,以前的服务唤醒在5.0已经失效,现在我们尽可能的做到保活方式就是提高进程的优先级,本文介绍一种1像素Activity保活进程的实现(据说QQ也在用)。
其整个逻辑就是在手机屏幕黑屏时,我们启动一个1像素的Activity,其占用内存很小毕竟只有1像素嘛,无形中减小了内存的回收几率,在屏幕亮的时候就关闭该页面。直接上代码实现:
首先需要在MainActivity中注册一个监听手机屏幕状态的广播监听:
//注册监听屏幕的广播 mOnepxReceiver = new OnePixelReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction("android.intent.action.SCREEN_OFF");intentFilter.addAction("android.intent.action.SCREEN_ON");intentFilter.addAction("android.intent.action.USER_PRESENT");registerReceiver(mOnepxReceiver, intentFilter);
监听到屏幕状态后的处理:
/** * Created by Administrator on 2017/7/10. * 监听屏幕状态的广播 */public class OnePixelReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { //屏幕关闭启动1像素Activity Intent it = new Intent(context, OnePiexlActivity.class); it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(it); } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { //屏幕打开 结束1像素 context.sendBroadcast(new Intent("finish")); Intent main = new Intent(Intent.ACTION_MAIN); main.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); main.addCategory(Intent.CATEGORY_HOME); context.startActivity(main); } }}
创建我们的1像素的Activity:
/** * Created by Administrator on 2017/7/10. */public class OnePiexlActivity extends Activity { private BroadcastReceiver endReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置1像素 Window window = getWindow(); window.setGravity(Gravity.LEFT | Gravity.TOP); WindowManager.LayoutParams params = window.getAttributes(); params.x = 0; params.y = 0; params.height = 1; params.width = 1; window.setAttributes(params); //结束该页面的广播 endReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { finish(); } }; registerReceiver(endReceiver, new IntentFilter("finish")); //检查屏幕状态 checkScreen(); } @Override protected void onResume() { super.onResume(); checkScreen(); } /** * 检查屏幕状态 isScreenOn为true 屏幕“亮”结束该Activity */ private void checkScreen() { PowerManager pm = (PowerManager) OnePiexlActivity.this.getSystemService(Context.POWER_SERVICE); boolean isScreenOn = pm.isScreenOn(); if (isScreenOn) { finish(); } }}
我们还需要设置1像素activity为透明,不然可能会影响体验,但是影响不大,1像素毕竟是挑战视力的存在。
<style name="OnePixelActivity" parent="android:Theme.Holo.Light.NoActionBar">//无标题 <item name="android:windowIsTranslucent">true</item>//透明 </style>
AndroidManifest重配置
<activity android:name=".OnePiexlActivity" android:screenOrientation="portrait" android:theme="@style/OnePixelActivity"></activity>
以上为1像素保活进程的基本实现,后续在学习Notication提高进行优先级保活后分享。
阅读全文
1 0
- 1像素Activity进程保活
- 进程保活-探索篇之1像素保活
- Android 进程保活--1像素保活
- 一像素进程保活
- 安卓一像素Activity保活+动态广播
- 安卓 1像素页面保活
- (七)1像素保活后台服务
- 进程保活-踩坑篇
- Android进程保活
- 进程保活方法
- Android 进程保活
- Android进程保活
- Android进程保活
- 进程保活大全
- Android 进程保活
- Android进程保活
- 进程保活
- 进程保活
- 高通平台:USB充电
- js注意的细节
- LeetCode 3. Longest Substring Without Repeating Characters题解python
- Java学习 String 类
- QTP11的下载地址和破解教程
- 1像素Activity进程保活
- jQuery使用最广泛的javascript函数库
- Java线程:Callable和Future
- iOS中常见的几种函数(向上,向下,四舍五入)
- RecyclerView---adapter.notifyDataSetChanged()不起作用
- ElasticSearch Yellow status d
- druid连接池
- error MSB6006: “cmd.exe”已退出,代码为1
- Android XListView下拉刷新和上拉加载更多