я хотел бы знать, могу ли я снова запланировать таймер после того, как я его отменил. Здесь было сказано http://www.coderanch.com/t/452066/java/java/Exception-timer-IllegalStateException , что после того, как вы отмените таймер, невозможно будет ничего запланировать на том же таймере, если я не создам новый таймер. Кроме того, я обнаружил следующую ошибку: java.lang.IllegalStateException: Таймер был отменен. Я пытаюсь создать таймер, который бы регулярно выполнял сканирование Wi-Fi. Но я хотел «приостановить» или, если нет, отменить таймер, когда он выполняет некоторые вычисления после сканирования. Только после того, как он завершит расчет и вернет некоторые результаты, я возобновлю таймер.Может ли кто-нибудь сказать мне, как я могу решить эту проблему?
Забыл упомянуть, что я буду запускать таймер только после того, как закончу загрузку изображений, которые я использовал для этого с помощью AsyncTask.
Я пытался сделать это отдельным потоком, чтобы он не задерживал поток пользовательского интерфейса.
Вот приблизительный скелет программы и таймер запуска, в котором он будет выполнять сканирование Wi-Fi по истечении времени только после полной загрузки изображения (после « load.execute (context); »):
public class LargeImageScroller extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new SampleView(this));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {...}
@Override
public boolean onOptionsItemSelected(MenuItem item) {...}
//this is the class where the program would do all the UI and display images
private static class SampleView extends View {
public SampleView(Context context) {
:
loadMap load = new loadMap();
load.execute(context);
scanTask = new TimerTask(){
@Override
public void run() {
// TODO Auto-generated method stub
handler.post(new Runnable() {
public void run() {
wifi = (WifiManager)context.getSystemService(WIFI_SERVICE);
context.registerReceiver(receiverWifi, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
wifi.startScan();
Log.d("TIMER", "Timer set off");
}
});
}
};
scanTimer.schedule(scanTask, refreshRate);
}
public class wifiReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
List sc = wifi.getScanResults();
for(int i=0; i>{...}
}
Использует разрешение, которое было включено:
Ошибка широковещательного приемника:
10-25 05:53:04.903: ERROR/ActivityThread(1551): Activity android.wps.LargeImageScroller has leaked IntentReceiver android.wps.LargeImageScroller$SampleView$wifiReceiver@43d1bca0 that was originally registered here. Are you missing a call to unregisterReceiver()?
10-25 05:53:04.903: ERROR/ActivityThread(1551): android.app.IntentReceiverLeaked: Activity android.wps.LargeImageScroller has leaked IntentReceiver android.wps.LargeImageScroller$SampleView$wifiReceiver@43d1bca0 that was originally registered here. Are you missing a call to unregisterReceiver()?
10-25 05:53:04.903: ERROR/ActivityThread(1551): at android.app.ActivityThread$PackageInfo$ReceiverDispatcher.(ActivityThread.java:797)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at android.app.ActivityThread$PackageInfo.getReceiverDispatcher(ActivityThread.java:608)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at android.app.ApplicationContext.registerReceiverInternal(ApplicationContext.java:724)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at android.app.ApplicationContext.registerReceiver(ApplicationContext.java:711)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at android.app.ApplicationContext.registerReceiver(ApplicationContext.java:705)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:308)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at android.wps.LargeImageScroller$SampleView$1$1.run(LargeImageScroller.java:187)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at android.os.Handler.handleCallback(Handler.java:587)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at android.os.Handler.dispatchMessage(Handler.java:92)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at android.os.Looper.loop(Looper.java:123)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at android.app.ActivityThread.main(ActivityThread.java:4363)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at java.lang.reflect.Method.invokeNative(Native Method)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at java.lang.reflect.Method.invoke(Method.java:521)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
10-25 05:53:04.903: ERROR/ActivityThread(1551): at dalvik.system.NativeStart.main(Native Method)