【问题标题】:Calculate how long an activity is in Foreground计算一个活动在前台的时间
【发布时间】:2022-12-11 16:11:54
【问题描述】:

我的应用程序包含 3 个不同的活动:HomeActivity、VideoActivity、ImageActivity 等。

主页包含几个启动视频和图像的按钮。

我需要记录有关活动在前台持续多长时间的指标。例如,假设用户打开视频,播放 10 秒,返回主页,打开图片 5 秒,转到主页,打开另一张图片 10 秒。

我想记录类似的东西

<ActivityName, ElapsedTime>
VideoActivity: 10s
HomePage: 1s
ImageActivity: 5s
HomePage: 2s
ImageActivity: 10s

我不必将 ActivityName 和 ElapsedTime 存储在 sharedPreferences 或任何东西中。一旦计算出 ElapsedTime,我正在使用内部 api 将数据发送到后端。

这就是我目前拥有的:

public class HomeActivity : AppCompatActivity()  {
    @Inject
    lateinit val someBackend: SomeBackend
    
    var startTime: Long = 0L

    override fun onCreate(Bundle savedInstanceState) {
        ....
    }
    
    // When activity comes into foreground
    override fun onResume() {
        super.onResume()
        startTime = System.currentTimeMillis(); 
    }

    //when activity loses focus
    override fun onPause() {
        super.onPause()
        elapsedTime = System.currentTimeMillis() - startTime
        someBackend.record("HomeActivity", elapsedTime)
    
    }
}
public class VideoActivity : AppCompatActivity()  {
    @Inject
    lateinit val someBackend: SomeBackend
    
    var startTime: Long = 0L

    override fun onCreate(Bundle savedInstanceState) {
        ....
    }
    
    // When activity comes into foreground
    override fun onResume() {
        super.onResume()
        startTime = System.currentTimeMillis(); 
    }

    //when activity loses focus
    override fun onPause() {
        super.onPause()
        elapsedTime = System.currentTimeMillis() - startTime
        someBackend.record("VideoActivity", elapsedTime)
    
    }
}
public class ImageActivity : AppCompatActivity()  {
    @Inject
    lateinit val someBackend: SomeBackend
    
    var startTime: Long = 0L

    override fun onCreate(Bundle savedInstanceState) {
        ....
    }
    
    // When activity comes into foreground
    override fun onResume() {
        super.onResume()
        startTime = System.currentTimeMillis(); 
    }

    //when activity loses focus
    override fun onPause() {
        super.onPause()
        elapsedTime = System.currentTimeMillis() - startTime
        someBackend.record("ImageActivity", elapsedTime)
    
    }
}

这个实现看起来很简单,我担心我可能在这里遗漏了一些东西...... 有没有这不考虑的情况? 有比这更好的方法吗?

(如果相关)这是针对在设备上运行的演示应用程序。因此 HomeActivity 将一直运行,除非用户中断。 家庭活动可以持续 2 天或 2 个月....

【问题讨论】:

  • 这几乎就是你想要的。计算就是这么简单。

标签: java android kotlin android-activity


【解决方案1】:

您可以在应用程序类中使用ActivityLifecycleCallbacksregisterActivityLifecycleCallbacks。这有助于您跟踪活动状态并计算活动时间

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2017-12-27
    • 1970-01-01
    相关资源
    最近更新 更多