1像素Activity进程保活

原创 2017年07月10日 11:34:46

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像素保活

背景:从产品的角度来说,任何一个 app 的 PM都希望自己的 app 在用户手机中的留存率高些,之前我接触到的一个业务需求也是如此,要求提升app 在国内第三方厂商 ROM中的存活率。如前篇所述踩坑...

1像素的Activity让应用在息屏后保活

集成后,经过测试,有的手机还是会杀死,更残忍的是,在你的手机息屏的时候,5分钟之内,你的Service早被杀的无影无踪,后来,在网上了解了一个防止Service在息屏后被杀死的思路,就是监听屏幕亮灭的...

Android中的各种保活1

作者:腾讯——张兴华 目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题。本文对 Android 进程拉活进行一个总结。 Android 进程拉活包括两个层面:...

安卓一像素Activity保活+动态广播

Android8.0马上就要发布,Google对于安卓市场上各种应用占据内存空间的问题不断进行内存完善,我们的应用进程很难再保持不死之身,以前的服务唤醒在5.0已经失效,现在我们尽可能的做到保活方式就...

一个像素的activity

android:configChanges="keyboardHidden|keyboard|orientation|navigation|screenSize"             andro...

一像素进程保活

Android 进程保活分为如下两种情况:          1. 提供进程优先级,降低进程被杀死的概率          2. 在进程被杀死后,进行拉活 进程的优先级分为5级:          1...

Android 进程保活都在这里

http://www.jianshu.com/p/9d737a0d1fd5 为什么要做进程保活 对于很多应用来说推送是非常重要,而ios能使用系统方式非常好的实现,但Android系统Push...

一个Demo学会用Android兼容包新控件

一个Demo学会用Android兼容包新控件 前言 伟大的Google为Android推出了一系列的兼容包,最新的就是Design Support Library了,这里我们结...

用SeekBar更改图片的大小,缩放及其旋转

这里有两个主要的类,Matrix 和 DisaplayMetrics Matrix 中文是矩阵的意思,用来实现图片的缩放,平移,旋转的。API里解释为:可以用这个类生成一个3 x 3 的一个矩阵,在...

实现谣传QQ中的手段——“1像素页面保活”

实现谣传QQ中的手段——“1像素页面保活”关于App保活,曾经使用N多方法,只为本尊不被秒杀,随着sdk版本的提升,很多法宝已经失去了原本的神奇作用,那么今天我们来试试传说中的一像素保活实现。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1像素Activity进程保活
举报原因:
原因补充:

(最多只允许输入30个字)