[英]TimerTask Fragment error in Android
我正在嘗試運行具有TimerTask的代碼,但遇到了一些錯誤。 我的MainActivity是http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/我正在調用一個片段來做一些具有這個Timertask的動畫。 一切都工作正常,但當我從列表項中選擇不同的片段時,我遇到了TimerTask錯誤。
public class MyTimerTask extends TimerTask {
@Override
public void run() {
while(true)
{try {
Thread.sleep(1000);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
updateTextView();
}
});
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
Logcat跟蹤:
FATAL EXCEPTION: Timer-0
java.lang.NullPointerException at com.example.Project.HomeAnimation$MyTimerTask.run(HomeAnimation.java:53)
at java.util.Timer$TimerImpl.run(Timer.java:284)
你需要以某種方式停止while循環。 也許在onDestroy
中將類標志設置為false,而while循環變為while(flag)
:
public class MyTimerTask extends TimerTask {
@Override
public void run() {
flag = true;
while(flag && (getActivity() != null))
{try {
Thread.sleep(1000);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
updateTextView();
}
});
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
你的onDestroy
方法看起來像:
public void onDestroy() {
flag = false;
super.onDestroy();
}
不要忘記在片段類中聲明flag
:
private boolean flag = false;
您可以將Handler
與Runnable
結合使用:
Handler hander = new Handler();
// Your runnable that will be triggered.
Runnable runnable = new Runnable() {
public void run() {
// do stuff
// post it again
handler.postDelayed(this, delay);
}
};
// Start
hander.post(runnable);
// Stop
handler.removeCallbacks(runnable);
如果您使用片段,最簡單的方法是通過調用isVisible()方法檢查當前片段是否可見:
@Override
public void run() {
if (isVisible()) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
// stuff to do
}
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.