如何在Android JAVA中为DB Task使用线程



当我想创建一个新线程时该使用什么方法>运行DB任务>返回结果>如果DB任务成功,运行另一个任务>然后返回到主线程更新UI使用收到的结果?

我知道Kotlin coroutine是Kotlin中的解决方案,但是如何在Java中实现这一点,并且在著名的AsyncTask被弃用之后?

+ +我使用线程文档的一些信息,但代码是复杂的理解,可以有一个简单的代码来实现上述用例提到的其他人的未来参考?

试试这个

class MyActivity extends AppCompatActivity {
private HandlerThread dbHandlerThread = null;
private Handler dbHandler = null;
@Override
public void onCreate(Bundle savedInstanceState) {
dbHandlerThread = new HandlerThread("db-thread");
dbHandlerThread.start();
dbHandler = new Handler(dbHandlerThread.getLooper());
doSomeDbStatement();
}
@Override
public void onDestroy() {
if (dbHandlerThread != null) {
dbHandlerThread.quitSafely();
}
}
private void bringResultHere(List<Data> result) {
// do something here
}
private void doSomeDbStatement() {
dbHandler.post(() -> {
final List<Data> result = doFetchDataFromDb();

MyActivity.this.runOnUiThread(() -> bringResultHere(result));
});
}
}

最好的方法是使用RxJava和RxAndroid

在你实现它的库之后,你可以使用single为1排放和Observable为多个排放

private Single<returnType> getSomthing() {
return Single.create(emitter -> {
//write the DB call you want ot make in background
emitter.onSuccess(varToReturnOnSuccess);
});
}

a single将只返回您使用emitter.onSuccess发送的一个数据,并且您将在订阅中获得它,如:

.subscribe(returnedVar -> {
//use it here
});

最终调用将像:

getSomthing()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(returnedVar -> /*use the returned var here*/ , throwable -> throwable.printStackTrace());

getSomthing(),returnedVar,returnType,varToReturnOnSuccess为名称,仅作说明,可作相应修改

相关内容

  • 没有找到相关文章

最新更新