gpt4 book ai didi

java - 线程服务。如何在延迟后重新启动某些线程?

转载 作者:行者123 更新时间:2023-11-30 03:44:11 25 4
gpt4 key购买 nike

我正在尝试使用 Handler 执行此操作,但我的 Handler 想要静态,所以我不能使用 startThread 方法。

这是处理程序

private class ServiceHandler extends Handler {
@Override
public void handleMessage(Message msg) {
Integer tmp = msg.what;
Log.d(Tag, tmp.toString());
switch (msg.what) {
case THREAD_SYNC_START:
startSyncThread();
break;
case THREAD_SYNC_STOP:
mSyncThread.interrupt();
break;
default:
break;
}
}
}

这是我的服务启动线程的方法

private void startSyncThread() {
if (mSyncThread != null) mSyncThread.interrupt();
mSyncThread = new SyncThread();
mSyncThread.start();
}

线程向处理器发送消息

        mServiceHandler.sendEmptyMessageDelayed(THREAD_SYNC_START, 2000);

我不需要任何泄漏,所以我正在寻找完成此任务的正确方法。

最佳答案

我写了一些示例代码,您可以在其中改用 AsyncTask,并让它的回调确定您是否应该创建一个新的 AsyncTask。如有错误请告知。

测试 fragment :

public class TestFragment extends Fragment {
private Handler mHandler;

/*
* Skipping most code and I will only show you the most essential.
*/

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mHandler = new Handler();

startAsyncTask(0);
}

private void startAsyncTask(long milisecondsToDelay) {
mHandler.postDelayed(new Runnable() {

@Override
public void run() {
TestAsyncTask testAsyncTask = new TestAsyncTask(new FragmentCallback() {

@Override
public void onTaskDone() {
startAsyncTask(1000);
}
});

testAsyncTask.execute();
}
}, milisecondsToDelay);

}

public interface FragmentCallback {
public void onTaskDone();
}
}

测试异步任务:

public class TestAsyncTask extends AsyncTask<Void, Void, Void> {
private boolean mShouldCreateNewAsyncTask;
private FragmentCallback mFragmentCallback;

public TestAsyncTask(FragmentCallback fragmentCallback) {
mFragmentCallback = fragmentCallback;
}

@Override
protected Void doInBackground(Void... params) {
/*
* Do your loop or whatever and when you need to restart it set
* mShouldCreateNewAsyncTask = true and return null.
*/

mShouldCreateNewAsyncTask = true;

return null;
}

@Override
protected void onPostExecute(Void result) {
if (mShouldCreateNewAsyncTask) {
mFragmentCallback.onTaskDone();
}
}
}

关于java - 线程服务。如何在延迟后重新启动某些线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15272349/

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