簡體   English   中英

Android在methdod之前顯示吐司

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM