Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 计时器-0致命错误_Android_Timer_Android Asynctask - Fatal编程技术网

Android 计时器-0致命错误

Android 计时器-0致命错误,android,timer,android-asynctask,Android,Timer,Android Asynctask,我正在使用计时器调用WebService,它将每5秒轮询一次。这是我的代码 timer=new Timer(); timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { // TODO Auto-generated method stub new MyWS().execute(URL); } }

我正在使用计时器调用WebService,它将每5秒轮询一次。这是我的代码

timer=new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            new MyWS().execute(URL);    
        }
    }, 1000, 5000);
但它在MyWS().execute(URL)处给了我致命的异常;线路。 下面显示了log cat

05-30 11:46:47.299: E/AndroidRuntime(2801): FATAL EXCEPTION: Timer-0
05-30 11:46:47.299: E/AndroidRuntime(2801): java.lang.ExceptionInInitializerError
05-30 11:46:47.299: E/AndroidRuntime(2801):     at com.example.vuzixvideo.MainActivity$1.run(MainActivity.java:59)
05-30 11:46:47.299: E/AndroidRuntime(2801):     at java.util.Timer$TimerImpl.run(Timer.java:284)
05-30 11:46:47.299: E/AndroidRuntime(2801): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
05-30 11:46:47.299: E/AndroidRuntime(2801):     at android.os.Handler.<init>(Handler.java:121)
05-30 11:46:47.299: E/AndroidRuntime(2801):     at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:607)
05-30 11:46:47.299: E/AndroidRuntime(2801):     at android.os.AsyncTask$InternalHandler.<init>(AsyncTask.java:607)
05-30 11:46:47.299: E/AndroidRuntime(2801):     at android.os.AsyncTask.<clinit>(AsyncTask.java:190)
05-30 11:46:47.299:E/AndroidRuntime(2801):致命异常:计时器-0
05-30 11:46:47.299:E/AndroidRuntime(2801):java.lang.ExceptionInInitializeError
05-30 11:46:47.299:E/AndroidRuntime(2801):在com.example.vuzixvideo.MainActivity$1.run(MainActivity.java:59)
05-30 11:46:47.299:E/AndroidRuntime(2801):在java.util.Timer$TimerImpl.run(Timer.java:284)
05-30 11:46:47.299:E/AndroidRuntime(2801):原因:java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序
05-30 11:46:47.299:E/AndroidRuntime(2801):在android.os.Handler.(Handler.java:121)
05-30 11:46:47.299:E/AndroidRuntime(2801):在android.os.AsyncTask$InternalHandler。(AsyncTask.java:607)
05-30 11:46:47.299:E/AndroidRuntime(2801):在android.os.AsyncTask$InternalHandler。(AsyncTask.java:607)
05-30 11:46:47.299:E/AndroidRuntime(2801):在android.os.AsyncTask.(AsyncTask.java:190)

您在计时器中执行的操作必须尝试在主UI线程上执行。试试这个:

timer=new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
       runOnUiThread(new Runnable() {
           @Override
           public void run() {
               new MyWS().execute(URL);   
           }
       });
   }
}, 1000, 5000);
或者可能是这样:

private Timer mTimer1;
private TimerTask mTt1;
private Handler mTimerHandler = new Handler(Looper.getMainLooper());

private void stopTimer(){
    if(mTimer1 != null){
        mTimer1.cancel();
        mTimer1.purge();
    }
}

private void startTimer(){
    mTimer1 = new Timer();
    mTt1 = new TimerTask() {
        public void run() {
            mTimerHandler.post(new Runnable() {
                public void run(){
                    new MyWS().execute(URL);   
                }
            });
        }
    };

    mTimer1.schedule(mTt1, 1, 5000);
}

这将在主循环器上创建一个处理程序,计时器将向其发布操作。我没有测试它,但它应该可以工作。

请参阅线程规则@。使用带有alaram的服务manager@Raghunandan:因此,为了使用轮询,我需要使用处理程序,但我尝试了,这不是轮询TimerTask在不同的线程上运行。支持您在ui线程上调用asynctask。再次阅读发布的链接。同时阅读Handler.timertask的用法。它在后台运行,然后使用
runOnUiThread
。asynctask doinbackground也在后台线程上运行。我想op需要一个service@bstar:THnx。。真的吗helped@Rohit服务就是你想要的。定时器+处理器良好luck@Raghunandan:我知道定时器+处理器会很快耗尽我的电池电量,也会占用我的系统资源,
AlarmManager
是一个不错的选择。但我只是在做一些实验