转载请注明出处: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活动恢复正常)