2015-04-06 138 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