2015-04-06 193 views
1

我正在尋找一種方法來延遲我的應用程序創建和顯示吐司。我使用幾個不同的時間間隔,最大的是5分鐘。我使用睡眠來延遲程序,但大約一分鐘後,應用程序將崩潰。任何幫助將不勝感激。如果需要更多信息,請告訴我!謝謝!!延遲執行代碼無崩潰

+1

您可以使用類似於AsyncTask或線程的東西,只需指定線程即可。休眠(毫秒); – Arlind

回答

2

這是一個AsyncTask,它在被調用5秒後顯示Toast。

public class ToastAsyncTask extends AsyncTask<String,Void,String> 
    { 
     private Context mContext; 

     public SaveAuctionAsyncTask(Context mContext) 
     { 
      this.mContext = mContext; 
     } 

     protected void onPreExecute() 
     { 

     } 

     @Override 
     protected String doInBackground(String... arg0) 
     { 
      Thread.sleep(300000); //300000 is 5 minutes 
     } 

     @Override 
     protected void onPostExecute(String result) 
     { 
      Toast.makeText(mContext, "Showing toast", Toast.LENGTH_LONG).show(); 
     } 
    } 

您從活動執行的ToastAsyncTask的方法是這樣的:

ToastAsyncTask toastAsyncTask = new ToastAsyncTask (this); 
toastAsyncTask .execute(); 
+1

不應該從主線程調用Toast.show()?然後這段代碼會拋出異常並崩潰 –

+1

謝謝你注意到,但它允許在onPostExecute方法 – Arlind

+0

@NannuoLei他的代碼很好,你可以從onPostExecute運行簡單的UI事件就好了 – Petro

3

您可以使用一個處理器的postDelayed在主UI線程後執行代碼:

int delay = 2000; 

Handler handler = new Handler(); 

// to execute in 2 sec 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
    Toast.makeText(mContext, "Showing toast", Toast.LENGTH_LONG).show(); 
}}, delay); 
+0

使用view.postDelayed()跳過新的Handler()部分。 – songchenwen