我正在开发一个Android应用程序,在该应用程序中,用户可以获得使用该应用程序的积分,可用于解锁应用程序内功能。
我有一个名为rewardPoints()
的函数,该函数生成随机整数,并且我希望在用户使用该应用程序时随机调用它。然后将这些点加到数据库中。
fun rewardPoints() {
var points = Random().nextInt((5-1) + 1)
}
在用户使用应用程序/与应用程序交互时,如何随机调用函数rewardPoints()
?
答案 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甚至可以更轻松地实现上述目的