如何随机奖励应用使用积分

时间:2018-10-16 18:45:49

标签: java android random kotlin

我正在开发一个Android应用程序,在该应用程序中,用户可以获得使用该应用程序的积分,可用于解锁应用程序内功能。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

window.getComputedStyle()

您可以在“活动”的val handler = Handler() handler.post({ rewardPoints() handler.postDelayed(this, DELAY_TIME_MS) }) 中将其启动并停止onResume,以确保仅在应用程序处于活动状态时运行。

答案 1 :(得分:0)

您可以在活动中添加观察者,检查您是否有活动,在这种情况下,开始定期任务以奖励积分。

示例:

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?) {}
}

如果您使用生命周期的体系结构组件,则使用https://developer.android.com/reference/android/arch/lifecycle/ProcessLifecycleOwner并监听所需的Lifecycle.Event甚至可以更轻松地实现上述目的