我首先使用改造在后臺執行緒上進行查詢。然后我在onResponse回呼中創建一個新執行緒。然后我讓執行緒休眠 10 秒并嘗試執行一些代碼。當執行緒處于休眠狀態時,我退出了我的應用程式。但是,當我在執行緒睡眠期間退出我的應用程式時,永遠不會執行記錄器。
mainService = RetrofitClient.getInstance().getRetrofit().create(MainService.class);
mainService.getPosts().enqueue(new Callback<List<Post>>() {
@Override
public void onResponse(@NotNull Call<List<Post>> call, @NotNull Response<List<Post>> response) {
//Running on main thread
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//This code is never executed. I don't see it in the logcat.
Log.d(TAG, "onCreate: Background thread is still running -- " Thread.currentThread().getName());
}
}).start();
}
@Override
public void onFailure(@NotNull Call<List<Post>> call, @NotNull Throwable t) {
Log.e(TAG, "onFailure: Call failed", t);
}
});
Log.d(TAG, "onCreate: Background thread is still running -- "....即使它在單獨的執行緒上運行,為什么不執行?
這是我正在嘗試做的事情的簡化示例。在我的另一個專案中,在我進行改造呼叫后,即使用戶關閉了應用程式,我也想將資料保存到 SQLite。但是在這個例子中,我試圖找出記錄器沒有被執行的原因。
uj5u.com熱心網友回復:
當執行緒處于休眠狀態時,我退出了我的應用程式。
在許多(大多數?)設備上,這將終止您的行程,尤其是在您沒有運行服務的情況下。終止您的行程會終止您的所有執行緒。
應用程式在沒有服務的情況下被殺死后如何在后臺執行緒中運行代碼?
WorkManager如果不需要立即完成作業,您可以使用 將作業排入佇列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/336700.html
上一篇:將結果串列傳遞給Kotlin專案中的Java建構式類
下一篇:java.sql.SQLException:不允許對ResultSet.TYPE_FORWARD_ONLY型別的結果集進行操作。為什么?[復制]
