簡體   English   中英

Android中的TimerTask Fragment錯誤

[英]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;

您可以將HandlerRunnable結合使用:

 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM