应用保活手段之一:灭屏拉起Activity

遇到的例子:XX新闻

大致流程: 收到灭屏广播,起动HollowActivity, 周期设置alarm触发启动 HollowActivity(避免类似应用).
(亮屏finish HollowActivity, 避免被发现).

关键Log:
05-21 16:33:37.017929 18641 18641 I KeepAlive: onReceiveScreenBroadcast [android.intent.action.SCREEN_OFF]
05-21 16:33:37.220872 18641 18641 I KeepAlive: onShowOffScreenActivity
05-21 16:33:37.237014 13652 14439 I ActivityManager: START u0 {flg=0x10000000 cmp=com.tencent.news/.push.alive.offactivity.HollowActivity} from uid 10178
05-21 16:33:39.023445 18641 18641 I KeepAlive: onCheckState
05-21 16:33:39.026202 18641 18641 I KeepAlive: Check Push Process Importance [300], isFocus [false].
05-21 16:33:39.026496 18641 18641 I KeepAlive: onShowOffScreenActivity
05-21 16:33:39.033350 13652 14608 I ActivityManager: START u0 {flg=0x10000000 cmp=com.tencent.news/.push.alive.offactivity.HollowActivity} from uid 10178

但灭屏启动Activity,Android会pause该Activity
灭屏启动时触发Pause的log:
05-21 16:18:37.952 8746 10752 V ActivityManager: Sleep needs to pause ActivityRecord{494f8a7 u0 com.tencent.news/.push.alive.offactivity.HollowActivity t178}

灭屏启动的栈:
29560:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStack.goToSleepIfPossible(ActivityStack.java:1429)
29561:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStack.checkReadyForSleep(ActivityStack.java:1402)
29562:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStack.checkReadyForSleepDelayed(ActivityStack.java:1410)
29563:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked(ActivityStack.java:2501)
29564:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStackSupervisor.resumeFocusedStackTopActivityLocked(ActivityStackSupervisor.java:2377)
29565:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStarter.resumeTargetStackIfNeeded(ActivityStarter.java:2485)
29566:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1703)
29567:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:1459)
29568:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:1060)
29569:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:695)
29570:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStarter.startActivityMayWait(ActivityStarter.java:1358)
29571:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityStarter.execute(ActivityStarter.java:527)
29572:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:6166)
29573:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityManagerService.startActivityAsUser(ActivityManagerService.java:6120)
29574:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityManagerService.startActivity(ActivityManagerService.java:6111)
29575:05-21 16:33:39.056839 13652 14608 D ActivityManager: at android.app.IActivityManager S t u b . o n T r a n s a c t Stub.onTransact Stub.onTransactstartActivity ( I A c t i v i t y M a n a g e r . j a v a : 10610 ) 29576 : 05 − 2116 : 33 : 39.0568391365214608 D A c t i v i t y M a n a g e r : a t a n d r o i d . a p p . I A c t i v i t y M a n a g e r (IActivityManager.java:10610) 29576:05-21 16:33:39.056839 13652 14608 D ActivityManager: at android.app.IActivityManager (IActivityManager.java:10610)29576:052116:33:39.0568391365214608DActivityManager:atandroid.app.IActivityManagerStub.onTransact(IActivityManager.java:111)
29577:05-21 16:33:39.056839 13652 14608 D ActivityManager: at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:4113)
29578:05-21 16:33:39.056839 13652 14608 D ActivityManager: at android.os.Binder.execTransact(Binder.java:846)

at com.android.server.am.ActivityStack.resumeTopActivityUncheckedLocked
Google comment:
// When resuming the top activity, it may be necessary to pause the top activity (for
// example, returning to the lock screen. We suppress the normal pause logic in
// {@link #resumeTopActivityUncheckedLocked}, since the top activity is resumed at the
// end. We call the {@link ActivityStackSupervisor#checkReadyForSleepLocked} again here
// to ensure any necessary pause logic occurs. In the case where the Activity will be
// shown regardless of the lock screen, the call to
// {@link ActivityStackSupervisor#checkReadyForSleepLocked} is skipped.
final ActivityRecord next = topRunningActivityLocked(true /* focusableOnly */);
if (next == null || !next.canTurnScreenOn()) {
checkReadyForSleepDelayed();
}

这样的话,该应用在灭屏时为TOP_APP, process_state状态为TOP_SLEEPING,优先级较高,会避过一些Android规则。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值