在开发中,有一些应用是需要常驻后台运行:长期对某个事物的监听或者长期扫描等。若手机锁屏,有一定几率被系统给杀死。

在手机锁屏之后避免应用给杀死,通过提高进程的优先级,使用1像素Activity进行保活。

原理:

当屏幕熄灭时,锁屏状态,调起一个一像素的Activity,提高进程的优先级。

一像素的Activity:

import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.os.PowerManager;
import android.app.Activity;
import android.util.Log;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.Window;
import android.view.WindowManager;import java.lang.ref.WeakReference;/*** @author Zachary* 一像素保活*/
public class ProtectActivity extends Activity {public static WeakReference<ProtectActivity> weakReference;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initView();initData();initEvent();}protected void initView() {weakReference = new WeakReference<>(this);Log.e("save", "初始化");Window window = getWindow();//放在左上角window.setGravity(Gravity.LEFT | Gravity.TOP);WindowManager.LayoutParams params = window.getAttributes();//起始坐标params.x = 0;params.y = 0;//宽高设计为1个像素params.height = 1;params.width = 1;window.setAttributes(params);}protected void initData() {}protected void initEvent() {}@Overridepublic boolean dispatchTouchEvent(MotionEvent motionEvent) {finishSelf();return super.dispatchTouchEvent(motionEvent);}@Overridepublic boolean onTouchEvent(MotionEvent motionEvent) {finishSelf();return super.onTouchEvent(motionEvent);}@Overridepublic void onResume() {super.onResume();if (isScreenOn()) {finishSelf();}}@Overrideprotected void onDestroy() {super.onDestroy();Log.e("save", "销毁保活页面");if (weakReference != null && weakReference.get() == this) {weakReference = null;}}/*** 关闭自己*/public void finishSelf() {if (!isFinishing()) {finish();}}/*** 判断主屏幕是否点亮** @return*/private boolean isScreenOn() {PowerManager powerManager = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {return powerManager.isInteractive();} else {return powerManager.isScreenOn();}}}

在AndroidManifest.xml配置:

ProtectActivity配置为透明。

<activity android:name=".Activity.ProtectActivity"android:launchMode="singleInstance"android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

锁屏广播:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;import com.zachary.util.Activity.ProtectActivity;public class ScreenReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {Log.e("save", "锁屏");Intent intentNew = new Intent(context, ProtectActivity.class);intentNew.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);context.startActivity(intentNew);} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {Log.e("save", "解锁");ProtectActivity protectActivity = ProtectActivity.weakReference != null ? ProtectActivity.weakReference.get() : null;protectActivity.finish();}}
}

使用方法:

public class MainActivity extends SuperActivity{private ScreenReceiver screenReceiver;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 保活,监控关屏幕registerReceiver();}private void registerReceiver() {screenReceiver = new ScreenReceiver();IntentFilter intentFilter = new IntentFilter();intentFilter.addAction(Intent.ACTION_SCREEN_ON);intentFilter.addAction(Intent.ACTION_SCREEN_OFF);registerReceiver(screenReceiver, intentFilter);}@Overridepublic void onDestroy() {super.onDestroy();unregisterReceiver(screenReceiver);}
}

Android之一像素保活相关推荐

  1. Android安卓进程保活(一)1像素且透明Activity

    Android进程保活·1像素且透明Activity提升App进程优先级 Android进程 此文章代码Github上有提交:https://github.com/NorthernBrain/proc ...

  2. Android安卓进程保活(二)

    Android进程保活·设置前台Service,提升App进程优先级 Android进程 此文章代码Github上有提交:https://github.com/NorthernBrain/proces ...

  3. android qq 进程保活,Android保活从入门到放弃:乖乖引导用户加白名单吧(附7大机型加白示例)...

    1.引言 IM在Android上的保活问题经常在即时通讯网的论坛和技术群里被讨论,自从Android 8.0后系统大大降低了后台运行应用的保活容忍度(详见<Android P正式版即将到来:后台 ...

  4. Android最强保活黑科技的最强技术实现

    大家好,我是老玩童.今天来跟大家分享TIM最强保活思路的几种实现方法.这篇文章我将通过ioctl跟binder驱动交互,实现以最快的方式唤醒新的保活服务,最大程度防止保活失败.同时,我也将跟您分享,我 ...

  5. android中像素单位dp、px、pt、sp转换

    android中像素单位有dp.px.pt.sp,每一种都代表不同的尺寸,先说一下每一种尺寸单位的含义. dp(dip): device independent pixels(设备独立像素). 不同设 ...

  6. Android 自用 App保活——音乐播放保活适配8.0 (贼好用)

    又是好久没有积累东西了.惭愧,惭愧...手动哭泣.闲话说到这里,下面我介绍一种新的 App 保活方式哈,目前用小米家族手机 涵盖 Android 5.0 到 Android 8.1家族的测试.结论是, ...

  7. android 代码设置像素,【Android实例】用设计原则来重构1像素保活代码

    1 类图 在[FJU项目]1像素进程保活(二)中,涉及到的几个类的类图如下所示(仅供参考): 实线箭头:关联 虚线箭头:依赖 重构前UML类图在上图中,OnePixelManager里面有太多的职责, ...

  8. android 后台运行 保活

    文章不错,转载自:https://mp.weixin.qq.com/s/F7W66Y03BBTWOnsds1ZX3A 优雅保活方案,原来Android还可以这样保活! Android技术杂货铺 昨天 ...

  9. Android之APP保活

    前言 强烈建议不要这么做,不仅仅从用户角度考虑,它只会滋生更多的流氓应用,拖垮Android 平台的流畅性(假如你手机里装了支付宝.淘宝.天猫.UC等阿里系的app,那么你打开任意一个阿里系的app后 ...

最新文章

  1. 码农书架——图灵三月书讯
  2. Docker Swarm Mode 学习笔记(聊聊 replicas)
  3. 单链表的基本操作_数据结构-单链表的基本操作
  4. MySql的Delete、Truncate、Drop分析
  5. 运维专家写给运维工程师的 6 条人生忠告
  6. 利用PHP的VLD查询OPCODE
  7. FISCO BCOS 区块最大最长交易执行时间
  8. android拉勾轮播,拉勾网顶部轮播图的实现(一)以及简单闭包的应用
  9. c10k java_c10k问题及其解决方案
  10. 解决Office 2007 “向程序发送命令时出现问题”
  11. 数字电路硬件设计系列(二)之DC-DC电源设计
  12. AngularJS的$destory用法
  13. 南柯服务器压力,从纳兰性德《木兰花》中看网络暴力和舆论压力带来的抑郁现象...
  14. 哔咔官网打不开显示黑屏?
  15. 国内外主流容灾备份厂商介绍
  16. 八进制在计算机系统中的应用场景,二进制、八进制、十进制、十六进制都能干什么? 十六进制计算器使用场景...
  17. REST 接口 原文翻译
  18. Python基础刻意练习:魔方方法
  19. MATLAB入门实例——绘制伯德图
  20. vue+ echarts实现地图(中国地图)

热门文章

  1. Vue中v-html会 导致哪些问题 (vue 11)
  2. 使用Charles抓包安卓模拟器(MuMu)
  3. xavier上如何挂载SD卡
  4. 技术总监/技术leader 职责与工作记录 第三天(包含技术部技术规范示例)
  5. 13th 发布在即,一文带你回顾Intel 12th Core
  6. 金博康拓优蓝铁虎安居宝安通旺龙晶创晶控大华门禁CPU梯控复制
  7. C语言——变量与数据类型
  8. C# Asp.Net MVC多表新增
  9. Java开发全终端实战租房项目
  10. 精通在vfp中调用word的方法_word方框(□)中打钩(√)的5种方法