Android:计算应用启动次数

时间:2011-08-08 16:59:20

标签: java android mobile

我需要计算用户启动应用的次数。我将值存储在共享首选项中,并将计数逻辑放在onCreate()

现在,由于在许多不同的场景中调用onCreate(),并非所有场景都包括实际启动应用程序的用户,我使用保存的实例状态包来存储{{1 - 如果标志不存在,我认为用户手动启动了应用程序。

这是必要的,还是仅仅检查传递给OnSaveInstanceState()的{​​{1}}捆绑包?在任何一种情况下,为什么?

5 个答案:

答案 0 :(得分:3)

您可以在意图上调用getCategories(),看它是否包含LAUNCHER类别。

答案 1 :(得分:1)

你可以考虑另一种方式......每次调用onDestroy()时都会递增计数器。通过这种方式,您可以保证程序实际上没有内存,并且计数器最多只会被1个关闭。

只是抛出一个想法,希望它能为你提供更多自己的想法!

答案 2 :(得分:1)

null结帐onCreate()应该可以正常使用。无需在onSaveInstanceState()中设置单独的标记。但是有一个可能的问题。

假设用户将您的应用程序置于后台(按主页键)。申请过程最终会被杀死。当用户重新启动应用程序时,您将在Bundle中收到一个正确的onCreate()对象,并设置了该标志。用户可以通过每次只为后台处理应用程序来防止计数器增加。

如果背景可能成为问题,您可以尝试以下方式:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    if (getLastNonConfigurationInstance() == null) {
        counter++;
    }
}

public Object onRetainNonConfigurationInstance() {
    return new Object();
}

之前我使用过上面的代码,它适用于Eclair,FroYo和Gingerbread。在Honeycomb中似乎已将getLastNonConfigurationInstance()onRetainNonConfigurationInstance()标记为已弃用,因此我不确定在您定位Honeycomb的情况下它是如何工作的。

答案 3 :(得分:0)

onCreate方法内,请勾选Activity#getCallingActivity。如果应用程序未从其他活动启动,则返回null

答案 4 :(得分:0)

首先,谢谢大家的答案。他们都以某种方式帮助过。

也就是说,经过多次尝试和不同的方法,我认为没有实际的100%可靠的方法来确定用户何时启动了应用程序。没有一个活动生命周期回调可以真正用于解决这个问题,无论是单独的还是组合的。

我得到的最接近的是计算onResume()次来电的数量,然后根据onPause()的回报在isFinishing()中减去它。然而,这种方法不考虑主页按钮,也可能是用户可以用来隐藏应用程序的其他事项。

如果我找到了可靠的方法,我会更新这个答案。