Timer
我的应用程序中有一个无限运行Animation
. 像这样:
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
//Running Animation Code
}
});
}
}, 1000, 1000);
现在我意识到即使用户点击Back Button
android ,这段代码也会运行。如果事实上它在后台运行并且似乎使用了大量内存。
我需要运行这段代码ONLY if user in the app
。事实上,当用户点击 时Back Button
,这Timer
会结束,如果用户点击Home Button
,一段时间后该用户不使用该应用程序,则终止此Timer
。
我需要的是防止使用内存。因为我意识到如果这段代码运行一段时间,应用程序就会冻结!我需要一个正常的行为。
如果您Activity
是 中的最后一个元素BackStack
,那么它将被置于背景中,就像您按下主页按钮一样。
如此,该onPause()
方法被触发。
因此,您可以在那里取消动画。
@Override protected void onPause() {
this.timer.cancel();
}
你也应该在onResume()
方法中开始你的动画。请注意,onResume()
在onCreate()
;之后也被称为 所以它甚至适合从应用程序冷启动开始动画。
@Override protected void onResume() {
this.timer.scheduleAtFixedRate(...);
}
onPause()
如果您从您的应用程序启动另一个应用程序(例如:铃声选择器),也会被调用。以同样的方式,当您返回您的应用程序时,onResume()
将被触发。
无需在onBackPressed()
.
另外,在onStop()
或中停止动画有onDestroy()
什么意义?
onPause()
已经进去了 当您的应用程序进入后台时,动画将被取消并且不会使用那么多内存。
不知道为什么我看到这么复杂的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句