目前,我有一个股票市场应用程序。当股票市场应用程序“退出”时,它将启动AlarmBroadcastReceiver
,以监控背景中的股票市场。
此代码看起来像这样。
// Code from main activity.
@Override
public void onPause() {
super.onPause();
ConnectivityChangeBroadcastReceiver.startAlarmBroadcastReceiver(this);
然而,这里有一个棘手的部分。当应用程序“退出”时,很难说出来。
从最终用户的角度来看,“退出”的确意味着,当屏幕上显示应用包中没有Activity
屏幕时。
onPause
AlarmBroadcastReceiver
AlarmBroadcastReceiver
Activity
启动另一个Activity
(与设置首选项活动类似)。 - 我不希望。但它将使用当前代码 AlarmBroadcastReceiver
从主Activity
启动另一个Activity
。
使用isFinishing
对我的情况不起作用,因为它只在按下后退按钮时返回true,而不是按下主页按钮
因此,我决定在AlarmBroadcastReceiver
onReceive
的早期安装以下逻辑
public class AlarmBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// If the current on screen activity, is *SAME* application package
// as AlarmBroadcastReceiver. This mean our app is not "quit" yet.
// We should return early without performing anything else.
然而,我意识到这不是一件容易的事,正如我从
中看到的那样How to get current foreground activity context in android?
ActivityManager
的{{1}}在Android 5中被弃用。建议的解决方案对我来说看起来并不那么优雅和可维护。
我想知道,对于我的情况,有没有更好的解决方法?因此,当屏幕上仍然可以看到同一个包中的其他getRunningTasks
时,我可以阻止AlarmBroadcastReceiver
运行其逻辑代码。
答案 0 :(得分:1)
希望在某种程度上有所帮助。这是我在谷歌搜索时发现的。
您可以使用registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback)注册活动生命周期 ,但在 API Level 14。
Steve Liles - Is my Android app currently foreground or background使用ActivityLifecycleCallbacks