电量优化-应用待机模式(实验)

官网解释

转载请注明出处:https://blog.csdn.net/m0_37840695/article/details/119494349

1.编写代码

public class MainActivity extends AppCompatActivity {

    private static final int MSG_HEART = 100;
    private static final int HEART_DURATION = 5_000;
    private static File HEART_LOG_FILE;
    private Handler mHandler;
    private HandlerThread mHandlerThread;
    private long mSwitch2BgTimeStamp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        HEART_LOG_FILE = new File(getExternalFilesDir("") + File.separator + "heart.log");

        initHandler();
    }

    private void initHandler() {
        mHandlerThread = new HandlerThread("heart_HT");
        mHandlerThread.start();
        mHandler = new Handler(mHandlerThread.getLooper()) {
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);

                switch (msg.what) {
                    case MSG_HEART: {

                        //next heart
                        heartAfterPaused();

                        if (mSwitch2BgTimeStamp == 0) break;

                        //1.heart via network
                        // TODO: 2021/8/7

                        //2.file log
                        long timeInMin = (System.currentTimeMillis() - mSwitch2BgTimeStamp) / HEART_DURATION;
                        FileIOUtils.writeFileFromString(HEART_LOG_FILE, "heartAfterPause : " + timeInMin + "(m)\r\n", true);

                        Log.d("MainActivity", timeInMin + "(m)");
                    }
                }
            }
        };
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mHandlerThread != null) mHandlerThread.quit();
        if (mHandler != null) mHandler.removeCallbacksAndMessages(null);
    }

    private void heartAfterPaused() {
        mHandler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mHandler.sendEmptyMessage(MSG_HEART);
            }
        }, HEART_DURATION);
    }

    @Override
    protected void onPause() {
        super.onPause();

        if (mSwitch2BgTimeStamp == 0) {
            // switch 2 background
            mSwitch2BgTimeStamp = System.currentTimeMillis();

            heartAfterPaused();
        }
    }
}

2.安装app(手机:荣耀I20)

3.关闭开发者模式

为了排除开发者模式的影响。

4.杀所有进程

为了使手机内存充足,不至于app置于后台时被杀。

3.启动app+返回home界面

一小段时间以后,app将进入闲置状态(行为受待机模式限制,具体哪些限制要看本app被放在哪个存储分区中)。按照官方的说法,应用待机模式下,CPU和网络活动都会暂停。

4.回到app

确定不是重新启动;此时app从闲置状态重新回到active状态,CPU活动正常。

5.查看打印文件

heartAfterPause:1(m)

heartAfterPause:2(m)

heartAfterPause:3(m)

heartAfterPause:10(m)

heartAfterPause:11(m)

heartAfterPause:12(m)

(注:说明在3个5秒钟后,app进入待机模式,CPU活动被停止;第10个5秒钟时重新变成前台进程,CPI活动恢复正常)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值