Android之一像素保活
在开发中,有一些应用是需要常驻后台运行:长期对某个事物的监听或者长期扫描等。若手机锁屏,有一定几率被系统给杀死。
在手机锁屏之后避免应用给杀死,通过提高进程的优先级,使用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之一像素保活相关推荐
- Android安卓进程保活(一)1像素且透明Activity
Android进程保活·1像素且透明Activity提升App进程优先级 Android进程 此文章代码Github上有提交:https://github.com/NorthernBrain/proc ...
- Android安卓进程保活(二)
Android进程保活·设置前台Service,提升App进程优先级 Android进程 此文章代码Github上有提交:https://github.com/NorthernBrain/proces ...
- android qq 进程保活,Android保活从入门到放弃:乖乖引导用户加白名单吧(附7大机型加白示例)...
1.引言 IM在Android上的保活问题经常在即时通讯网的论坛和技术群里被讨论,自从Android 8.0后系统大大降低了后台运行应用的保活容忍度(详见<Android P正式版即将到来:后台 ...
- Android最强保活黑科技的最强技术实现
大家好,我是老玩童.今天来跟大家分享TIM最强保活思路的几种实现方法.这篇文章我将通过ioctl跟binder驱动交互,实现以最快的方式唤醒新的保活服务,最大程度防止保活失败.同时,我也将跟您分享,我 ...
- android中像素单位dp、px、pt、sp转换
android中像素单位有dp.px.pt.sp,每一种都代表不同的尺寸,先说一下每一种尺寸单位的含义. dp(dip): device independent pixels(设备独立像素). 不同设 ...
- Android 自用 App保活——音乐播放保活适配8.0 (贼好用)
又是好久没有积累东西了.惭愧,惭愧...手动哭泣.闲话说到这里,下面我介绍一种新的 App 保活方式哈,目前用小米家族手机 涵盖 Android 5.0 到 Android 8.1家族的测试.结论是, ...
- android 代码设置像素,【Android实例】用设计原则来重构1像素保活代码
1 类图 在[FJU项目]1像素进程保活(二)中,涉及到的几个类的类图如下所示(仅供参考): 实线箭头:关联 虚线箭头:依赖 重构前UML类图在上图中,OnePixelManager里面有太多的职责, ...
- android 后台运行 保活
文章不错,转载自:https://mp.weixin.qq.com/s/F7W66Y03BBTWOnsds1ZX3A 优雅保活方案,原来Android还可以这样保活! Android技术杂货铺 昨天 ...
- Android之APP保活
前言 强烈建议不要这么做,不仅仅从用户角度考虑,它只会滋生更多的流氓应用,拖垮Android 平台的流畅性(假如你手机里装了支付宝.淘宝.天猫.UC等阿里系的app,那么你打开任意一个阿里系的app后 ...
最新文章
- 码农书架——图灵三月书讯
- Docker Swarm Mode 学习笔记(聊聊 replicas)
- 单链表的基本操作_数据结构-单链表的基本操作
- MySql的Delete、Truncate、Drop分析
- 运维专家写给运维工程师的 6 条人生忠告
- 利用PHP的VLD查询OPCODE
- FISCO BCOS 区块最大最长交易执行时间
- android拉勾轮播,拉勾网顶部轮播图的实现(一)以及简单闭包的应用
- c10k java_c10k问题及其解决方案
- 解决Office 2007 “向程序发送命令时出现问题”
- 数字电路硬件设计系列(二)之DC-DC电源设计
- AngularJS的$destory用法
- 南柯服务器压力,从纳兰性德《木兰花》中看网络暴力和舆论压力带来的抑郁现象...
- 哔咔官网打不开显示黑屏?
- 国内外主流容灾备份厂商介绍
- 八进制在计算机系统中的应用场景,二进制、八进制、十进制、十六进制都能干什么? 十六进制计算器使用场景...
- REST 接口 原文翻译
- Python基础刻意练习:魔方方法
- MATLAB入门实例——绘制伯德图
- vue+ echarts实现地图(中国地图)