检测应用程序何时从后台返回

时间:2014-12-22 14:07:37

标签: android background google-analytics

我想知道我的应用何时从后台返回。 onResume()不是一个好的解决方案,因为我在Main Activity旁边有另一个活动,所以它可以从后台返回到每个活动。目的是使用Google analytics并知道用户何时启动应用程序并将其从后台恢复。

谢谢大家,非常感谢。

3 个答案:

答案 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 等于您的应用程序包名称

更多信息:

http://developer.android.com/intl/es/reference/android/app/ActivityManager.RunningAppProcessInfo.html

答案 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