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中的存活率。如前篇所述踩坑...
  • BruceHurrican
  • BruceHurrican
  • 2017年03月13日 15:04
  • 3104

Android中的各种保活1

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

1像素Activity进程保活

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

一像素进程保活

Android 进程保活分为如下两种情况:          1. 提供进程优先级,降低进程被杀死的概率          2. 在进程被杀死后,进行拉活 进程的优先级分为5级:          1...
  • xuwb123xuwb
  • xuwb123xuwb
  • 2017年04月11日 10:49
  • 1858

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

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

(七)1像素保活后台服务

国内的android生态目前来说已经有所改观 但并不代表APP的运行环境就一定会好起来 不同厂商间的相互竞争,以及整个大环境的氛围 都在决定未来android生态的走向 或许不是每个APP 都能像QQ...
  • Android_xiong_st
  • Android_xiong_st
  • 2017年08月26日 16:04
  • 349

一个像素的activity

android:configChanges="keyboardHidden|keyboard|orientation|navigation|screenSize"             andro...
  • mengliwuti
  • mengliwuti
  • 2017年02月23日 13:04
  • 227

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

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

Android进程保活全攻略(中)

在上一篇博客Android进程保活全攻略(上)中介绍了进程保活的背景和一些方法的思路和实现方式,本篇博客我将承接上篇博客,继续进行介绍。9) 1像素悬浮层 **思路:**1像素悬浮层是传说的Q...
  • u012124438
  • u012124438
  • 2016年11月12日 22:30
  • 3918

【腾讯Bugly干货分享】Android进程保活招式大全

目前市面上的应用,貌似除了微信和手Q都会比较担心被用户或者系统(厂商)杀死问题。本文对 Android 进程拉活进行一个总结。...
  • Tencent_Bugly
  • Tencent_Bugly
  • 2016年08月12日 15:54
  • 3198
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:1像素Activity进程保活
举报原因:
原因补充:

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