【问题标题】:How can I randomly reward points for app usage如何随机奖励应用程序使用积分
【发布时间】:2019-03-21 09:03:41
【问题描述】:

我正在开发一个 android 应用程序,用户可以通过使用该应用程序获得积分,这些积分可用于解锁应用内功能。

我有一个名为rewardPoints() 的函数,它生成随机整数,我希望它在用户使用应用程序时随机调用。然后这些点被添加到数据库中。

fun rewardPoints() {
        var points = Random().nextInt((5-1) + 1)
}

如何在用户使用应用/与应用交互时随机调用函数rewardPoints()

【问题讨论】:

  • 我会使用计时器

标签: java android random kotlin


【解决方案1】:

我会使用Handler 来发布Runnable 来重新发布自己。像这样,

val handler = Handler()
handler.post({
    rewardPoints()
    handler.postDelayed(this, DELAY_TIME_MS)
})

您可以在 Activity 的 onResume 中启动它并在 onPause 中停止它,以确保它仅在应用处于活动状态时运行。

【讨论】:

    【解决方案2】:

    您可以在您的活动中添加一个观察者,检查您是否有活动活动,如果是,则启动定期任务以奖励积分。

    示例:

    class MyApp : Application(), Application.ActivityLifecycleCallbacks {
    
        override fun onCreate() {
            super.onCreate()
            registerActivityLifecycleCallbacks(this)
        }
    
        var count: Int by Delegates.observable(0) { _, old, newValue ->
            when (newValue) {
                0 -> onBackground()
                1 -> if (old == 0) onForeground()
            }
        }
    
        override fun onActivityResumed(activity: Activity?) {
            count++
        }
        override fun onActivityPaused(activity: Activity?) {
            count--
        }
    
    
        fun onForeground() {
            Log.d("TAG", "start.")
            events.start()
        }
    
        fun onBackground() {
            Log.d("TAG", "stop.")
            events.cancel()
        }
    
    
        val events = object: CountDownTimer(Long.MAX_VALUE, 1000) {
            // is called once per second as long as your app is in foreground
            override fun onTick(millisUntilFinished: Long) {
                if (ThreadLocalRandom.current().nextInt(100) < 5) {
                    Toast.makeText(this@MyApp, "You earned a point.", Toast.LENGTH_SHORT).show()
                }
            }
            override fun onFinish() { /* will never happen */}
        }
    
        /* not needed */
        override fun onActivityStarted(activity: Activity?) {}
        override fun onActivityDestroyed(activity: Activity?) {}
        override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {}
        override fun onActivityStopped(activity: Activity?) {}
        override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {}
    }
    

    如果您使用架构组件 Lifecycle,则使用 https://developer.android.com/reference/android/arch/lifecycle/ProcessLifecycleOwner 并侦听所需的 Lifecycle.Event,上述实现会更加简单

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2022-12-01
      • 2012-07-29
      • 2016-02-19
      • 1970-01-01
      • 2023-03-13
      • 2016-10-28
      相关资源
      最近更新 更多