我在一个 android 服务中有一些代码,一个每 3 秒运行一次 Asyntasks 的计时器。但有时我会收到此错误:
03-21 08:56:48.928: E/AndroidRuntime(26870): FATAL EXCEPTION: AsyncTask #3
03-21 08:56:48.928: E/AndroidRuntime(26870): java.lang.RuntimeException: An error occured while executing doInBackground()
03-21 08:56:48.928: E/AndroidRuntime(26870): at android.os.AsyncTask$3.done(AsyncTask.java:299)
03-21 08:56:48.928: E/AndroidRuntime(26870): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
03-21 08:56:48.928: E/AndroidRuntime(26870): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
03-21 08:56:48.928: E/AndroidRuntime(26870): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
03-21 08:56:48.928: E/AndroidRuntime(26870): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-21 08:56:48.928: E/AndroidRuntime(26870): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
03-21 08:56:48.928: E/AndroidRuntime(26870): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
03-21 08:56:48.928: E/AndroidRuntime(26870): at java.lang.Thread.run(Thread.java:856)
03-21 08:56:48.928: E/AndroidRuntime(26870): Caused by: java.lang.NullPointerException
03-21 08:56:48.928: E/AndroidRuntime(26870): at Dic.proj.pkg.notifService$check_last_asyn.doInBackground(notifService.java:251)
03-21 08:56:48.928: E/AndroidRuntime(26870): at Dic.proj.pkg.notifService$check_last_asyn.doInBackground(notifService.java:1)
03-21 08:56:48.928: E/AndroidRuntime(26870): at android.os.AsyncTask$2.call(AsyncTask.java:287)
03-21 08:56:48.928: E/AndroidRuntime(26870): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
03-21 08:56:48.928: E/AndroidRuntime(26870): ... 4 more
我不知道为什么。但我有一个猜测。我的服务通过以下代码从主要活动开始:
Intent service = new Intent(DictionaryActivity.this, notifService.class);
DictionaryActivity.this.startService(service);
我想我第一次通过打开主要活动来开始我的服务。然后第二次当我进入主要活动时,服务再次启动并且我的 Asyntasks 并行运行,这导致了这个错误......
有什么方法可以检查服务是否已经启动,然后不要再次启动它?我怎样才能解决我的问题?