gpt4 book ai didi

android - 重新安排。取消后的计时器给出 "java.lang.IllegalStateException: Timer cancelled."

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:15:05 25 4
gpt4 key购买 nike

我想知道取消后是否可以重新安排计时器。这里说,http://www.coderanch.com/t/452066/java/java/Exception-timer-IllegalStateException ,一旦你取消了定时器,就不可能在同一个定时器上安排任何事情,除非我创建一个新的定时器。而且,我遇到了以下错误,java.lang.IllegalStateException: Timer was cancelled.我正在尝试推出一个可以定期执行 Wifi 扫描的计时器。但是我希望“暂停”或者如果不是,则在扫描后执行某些计算时取消计时器。只有在它完成计算并返回一些结果后,我才会恢复计时器。谁能告诉我如何着手解决这个问题?

忘记提到只有在我使用 AsyncTask 完成图像加载后我才会启动计时器。

我试图在一个单独的线程中实现这一点,这样它就不会占用 UI 线程。

这是程序的粗略框架和启动计时器,只有在图像完全加载后(在“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<ScanResult> sc = wifi.getScanResults();
for(int i=0; i<sc.size(); i++){
Log.e("AndroidRuntime", sc.get(i).SSID);
}
}

}
public boolean onTouchEvent(MotionEvent event) {...}
protected void onDraw(Canvas canvas) {...}
private static Drawable LoadImageFromWebOperations(String url){...}
private static Bitmap decodeFile(File f, int requiredSize){...}
private class loadMap extends AsyncTask<Context, Void, ArrayList<Bitmap>>{...}
}

使用包含的权限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.DELETE_CACHE_FILES"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>

广播接收器遇到的错误:

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.<init>(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)

最佳答案

是的,取消计时器会终止其线程,因此您无法再次使用它。定时器没有任何内置的暂停方法。当你想“暂停”时,你可以取消计时器,当你想“恢复”时,你可以创建一个新的计时器。

关于android - 重新安排。取消后的计时器给出 "java.lang.IllegalStateException: Timer cancelled.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7866349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com