2014-01-28 60 views
-2

我正在寫一個活動。如何在使用java的android上同時執行一個簡單的任務

我只想將此活動的變量設置爲true,等待5秒鐘並將變量切換回false而不凍結當前線程執行。

任何幫助表示讚賞。我已經搜索了幾個小時,並嘗試各種不成功。

+0

有你tryed運行此爲BackgroundTask?當切換到假殺死任務。 –

+0

我試過這個,它沒有工作,我使用布爾和while循環來設置任務是否完成 – user3078403

+2

在同一主題上有很多帖子,提到爲什麼那些人失敗了......你的問題可能會被標記下來如果你不這樣做。 – harshal

回答

0

我想你正在尋找的是的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); 
0

你需要實現的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();

0

你可以這樣做,開始Thread。例如:

boolean myvar = true; 

new Thread(
    new Runnable() { 
    public void run() { 
     SystemClock.sleep(5000); 
     myvar = false; 
    } 
    } 
}).start(); 
+0

試過這個,凍結當前線程執行 – user3078403

+0

這沒有任何意義。如果你的執行真的凍結,那麼必須由於另一個原因,因爲這會啓動一個不在主UI線程中運行的並行線程。 – nKn

+0

你還有一個額外的},再次感謝你的回覆,雖然 – user3078403

相關問題