1
我嘗試運行此代碼以從我的數據庫中獲取用戶的狀態。該過程包含JSON,因此我創建了一個新的類來實現Runnable作爲後臺服務。我確實創建了一個類extends Service。在該服務中,我稱之爲線程。我使用處理程序並使用postDelayed重複該線程。postdelayed處理程序不重複運行
public int onStartCommand(Intent intent, int flags, final int startId) {
Toast.makeText(this,"SESSION START",Toast.LENGTH_SHORT).show();
handler.postDelayed(new Runnable() {
@Override
public void run() {
new Thread(new BackgroundThread(startId)).start();
}
},1000);
return START_STICKY;
}
我相信我的代碼這裏有重複BackgroundThread.class實現Runnable
public class BackgroundThread implements Runnable {
int service_id;
int mark=-1;
public BackgroundThread(int service_id) {
this.service_id=service_id;
}
@Override
public void run() {
JSONData jsonData = new JSONData();
if (jsonData.getJSONstring() == 1 && mark != 1) {
Log.e("STATUS", "" + jsonData.getJSONstring());
mark = 1;
} else if (jsonData.getJSONstring() == 0 && mark != 0) {
Log.e("STATUS", "" + jsonData.getJSONstring());
mark = 0;
}
Log.d("RUNNING","RUNNING");
}
}
但線程只會發生一次
11-09 23:38:56.683 6483-6526/com.example.asus.intentservice I/OpenGLRenderer﹕ Initialized EGL, version 1.4
11-09 23:38:58.743 6483-6526/com.example.asus.intentservice V/RenderScript﹕ 0xa34ed000 Launching thread(s), CPUs 4
11-09 23:38:59.642 6483-6745/com.example.asus.intentservice W/System﹕ ClassLoader referenced unknown path: /system/framework/tcmclient.jar
11-09 23:38:59.968 6483-6745/com.example.asus.intentservice E/STATUS﹕ 0
11-09 23:38:59.968 6483-6745/com.example.asus.intentservice D/RUNNING﹕ RUNNING
有什麼錯我的代碼?或者也許有替代品可以達到我的目的。但我更喜歡有人能幫我修復我的代碼。非常感謝它
*是否有什麼錯我的代碼*,是 - ?postDelayed職位只有一次。你想達到什麼目的? – Blackbelt
我需要線程運行重複檢查用戶的狀態。我一直在搜索互聯網,大多數網站都建議使用計時器或處理程序來實現這一目標。理解它我錯了嗎?我是android studio的新手。謝謝@Blackbelt –
postDelayed發佈一次可運行一次。如果你想多次發佈,你可以運行postrelayed再次。雖然這樣做與線程的結合是一種至少可以說的氣味 - 你可能不應該擁有runnable,並且應該只有一個無限循環的線程。 –