2011-09-06 150 views
9

即使在應用程序關閉後,我也會顯示吐司,它不會消失。我該如何解決?Android吐司不會消失

@Override 
public void onClipStoreLoadedClipsNotification(ClipStoreLoadedClipsNotification notif) 
{ 
    final ClipStoreLoadedClipsNotification notification = notif; 

    runOnUiThread(new Runnable() { 
     @Override 
     public void run() 
     { 
      Dialogs.DismissAll(); 
      list.onRefreshComplete(); 
      TextView text = (TextView)findViewById(R.id.loadclipstext); 
      ProgressBar pb = (ProgressBar)findViewById(R.id.loadclipsprogress); 

      if (notification.moreClipsAvailable) 
      { 
       text.setText(context.getString(R.string.loading_clips)); 
       pb.setVisibility(View.VISIBLE); 
      } 
      else 
      { 
       text.setText(context.getString(R.string.no_clips)); 
       pb.setVisibility(View.INVISIBLE); 
       int duration = Toast.LENGTH_SHORT; 
       Toast.makeText(SugarLoafContext.playbackTabContext, "No clips found.", duration).show(); 
      } 

      SugarLoafContext.currentCamera = notification.camera; 
      clipList = notification.clips; 

      refreshListView(); 
      readyToLoadMoreClips = true; 
      if (!firstClipsLoaded) 
       firstClipsLoaded = true; 
     } 
    }); 


} 
+0

像這樣設置持續時間int duration = Toast.LENGTH_SHORT; –

回答

7

唯一的解釋是您的Toast在循環中被調用。你應該跟蹤toast .show(),看看它是否被稱爲無限次。

的其他可視化的方式將做到這一點

Toast.makeText(SugarLoafContext.playbackTabContext, "No clips found.", duration).show(); 
Toast.makeText(SugarLoafContext.playbackTabContext, "Do you understand now?", duration).show(); 

我相信你將在一個looong時間或者看到兩個麪包......

44

它是一個IntentService內運行???

如果是這樣,問題在於Android中的Intent Services運行在與主節點不同的線程中,所以Toast在與主節點不同的線程中顯示,在顯示時間結束後, Android系統無法找到Toast在哪裏,所以它不能刪除它。

我有同樣的問題,現在,我建議大家不要在IntentService的內部顯示Toast,而是嘗試運行一個通用服務,或者打開一個活動,或嘗試一些不同的東西,如果完全有必要顯示吐司。

當您關閉應用程序時Toast不會消失的事實是IntentService仍在運行,您必須重新啓動系統或卸載應用程序以使Intent Service關閉。

+0

這對我來說不是一個問題,我很興奮地看到一些在後臺運行的東西:-) – Nabin

+0

對於我也面臨一些問題,同樣我也使用IntentService。有沒有解決方案? – sandeepmaaram

+0

啓動一個活動,並讓該活動成爲啓動吐司的活動。我知道這很難,但我們必須瞭解IntentService不能在UI線程上工作,所以我們必須啓動一個Activity(使用NEW_TASK標誌,並讓Activity啓動Toast)。如果你願意,你可以啓動這個活動,因爲用戶不會看到任何奇怪的東西。否則,您也可以檢查Snackbar元素:https://developer.android.com/reference/android/support/design/widget/Snackbar.html – zapotec

0

如果您的設備沒有網絡連接,並且您的應用執行了許可檢查並顯示Toast結果,也會發生這種情況。我的一個應用程序有這個問題,因爲我在檢查應用程序時顯示Toast。如果沒有網絡連接,Toast會告訴用戶仍然需要執行許可證重試,並且當我連接Toast時被移除,因爲許可證檢查可能有效。