我正在寫一個活動。如何在使用java的android上同時執行一個簡單的任務
我只想將此活動的變量設置爲true,等待5秒鐘並將變量切換回false而不凍結當前線程執行。
任何幫助表示讚賞。我已經搜索了幾個小時,並嘗試各種不成功。
我正在寫一個活動。如何在使用java的android上同時執行一個簡單的任務
我只想將此活動的變量設置爲true,等待5秒鐘並將變量切換回false而不凍結當前線程執行。
任何幫助表示讚賞。我已經搜索了幾個小時,並嘗試各種不成功。
我想你正在尋找的是的AsyncTask。
http://developer.android.com/reference/android/os/AsyncTask.html
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i/(float) count) * 100));
// Escape early if cancel() is called
if (isCancelled()) break;
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
一旦創建了任務執行得很乾脆:
new DownloadFilesTask().execute(url1, url2, url3);
你需要實現的AsyncTask接口,以及睡眠doInBackground()
方法中,改變你的變量回到onPostExecute()
方法
在你的類,你有你的布爾變量
布爾bValue = FALSE;
那麼你的活動
private class sleepFiveTask extends AsyncTask<Void, Void, Void> {
protected void onPreExecute() {
bValue = true;
}
protected void doInBackground(Void... params) {
try {
Thread.sleep(5000); //sleep for 5 seconds
} catch (InterruptedException e) {
e.printStackTrace();
// handle the exception...
// For example consider calling Thread.currentThread().interrupt(); here.
}
}
protected void onPostExecute(Void result) {
bValue = false;
}
}
裏面添加一個私有類,當你要執行它運行
新sleepFiveTask().execute();
你可以這樣做,開始Thread
。例如:
boolean myvar = true;
new Thread(
new Runnable() {
public void run() {
SystemClock.sleep(5000);
myvar = false;
}
}
}).start();
試過這個,凍結當前線程執行 – user3078403
這沒有任何意義。如果你的執行真的凍結,那麼必須由於另一個原因,因爲這會啓動一個不在主UI線程中運行的並行線程。 – nKn
你還有一個額外的},再次感謝你的回覆,雖然 – user3078403
有你tryed運行此爲BackgroundTask?當切換到假殺死任務。 –
我試過這個,它沒有工作,我使用布爾和while循環來設置任務是否完成 – user3078403
在同一主題上有很多帖子,提到爲什麼那些人失敗了......你的問題可能會被標記下來如果你不這樣做。 – harshal