[英]Android show toast before methdod
因為在Android上使用Google Maps時必須包含法律聲明,所以我在片段中添加了以下代碼:
//in oncreate view method
_noticeMaps.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View view)
{
Toast.makeText(getActivity().getApplicationContext(), "Loading", Toast.LENGTH_LONG).show();
showLegalNotice();
}
});
public void showLegalNotice(){
_legalNotice = GooglePlayServicesUtil.getOpenSourceSoftwareLicenseInfo(getActivity());
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Legal Notice");
builder.setMessage(_legalNotice);
AlertDialog dialog = builder.create();
dialog.show();
}
由於法律聲明需要很長時間才能放入setMessage中,因此該應用會在幾秒鍾后(5+)顯示該對話框。 這就是為什么我在showLegalNotice之前添加烤面包,以通知用戶其正在加載。 但是,對話框加載后會顯示吐司。 為什么在對話框加載之前不顯示吐司? 創建烤面包后,我稱showLegalNotice。 我知道我可以用線程修復它,但是我想了解為什么創建對話框后會顯示吐司。
最好的解決方案是將legalNotice
方法代碼放在AsyncTask
。 在對話框之后顯示Toast
,因為您正在UI線程上進行繁重的工作,這使它忙碌 ,這就是Toast落后的原因。
如果您不了解AsyncTask,可以在此處了解有關信息 。 您可以在AsyncTask的preExecute()
方法中顯示Toast。 將確保在采取任何其他措施之前先顯示吐司。
更新
是的,你是對的。 該代碼以順序方式運行,因此應該在方法運行之前顯示Toast
。 但是嘗試以不同的方式思考。
Toast是一個系統UI組件。 您在烤面包上調用show() ,您的代碼幾乎立即移至下一個繁重或長期運行的任務。
在屏幕上繪制或啟動吐司總是會有一點延遲 ,並且還取決於Android的各種風格。 因此,在吐司開始在屏幕上繪制之前, UI線程在執行長時間運行的任務時 會變得忙碌或擁擠,並使框架松動。
就在您的方法的長時間運行任務結束時, UI線程再次獲得自由,並能夠繼續繪制吐司。 這就是為什么顯示烤面包,但總是在方法完成執行后顯示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.