我想知道我的应用何时从后台返回。 onResume()不是一个好的解决方案,因为我在Main Activity旁边有另一个活动,所以它可以从后台返回到每个活动。目的是使用Google analytics
并知道用户何时启动应用程序并将其从后台恢复。
谢谢大家,非常感谢。
答案 0 :(得分:2)
创建一个扩展Activity
的公共基类。使用您需要的功能实施onResume()
。然后从此基类扩展所有其他活动。
基类中的onResume()
应该调用super.onResume()
,这也应该是每个活动onResume
方法中的第一行。
基础课程
public class BaseActivity extends Activity
@Override
public void onResume(){
super.onResume();
// code to do your analytics stuff
}
衍生活动
public class MainActivity extends BaseActivity
@Override
public void onResume(){
super.onResume();
// code for the individual activity
}
答案 1 :(得分:0)
您可以使用 ActivityManager.getRunningAppProcesses()检测后台应用程序,它返回RunningAppProcessInfo记录的列表。如果您的应用程序在后台,请检查 RunningAppProcessInfo.importance 字段等于 RunningAppProcessInfo.IMPORTANCE_BACKGROUND ,而 RunningAppProcessInfo.processName 等于您的应用程序包名称。
更多信息:
答案 2 :(得分:0)
android.arch.lifecycle 包提供了一个界面,可让您知道应用何时从后台返回。
您的应用程序应实现LifecycleObserver接口:
public class MyApplication extends Application implements LifecycleObserver {
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get().getLifecycle().addObserver(this);
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
private void onAppBackgrounded() {
Log.d("MyApp", "App in background");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
private void onAppForegrounded() {
Log.d("MyApp", "App in foreground");
}
}
为此,您需要将此依赖项添加到build.gradle文件中:
dependencies {
implementation "android.arch.lifecycle:extensions:1.1.1"
}
按照Google的建议,您应尽量减少在活动的生命周期方法中执行的代码:
一个常见的模式是实施依赖者的行为 活动和片段的生命周期方法中的组件。 但是,这种模式导致代码的组织不善,并导致 错误的扩散。通过使用生命周期感知的组件,您可以 可以将依赖组件的代码移出生命周期方法 以及组件本身。
您可以在此处了解更多信息: https://developer.android.com/topic/libraries/architecture/lifecycle