即使应用程序关闭后,我也会显示吐司,它不会消失。我该如何解决?
@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 :(得分:46)
它是否在IntentService
???
如果是这样,问题是Android中的Intent Services运行在与主要线程不同的线程中,因此Toast显示在与主要线程不同的线程中,在显示时间结束后, Android系统无法找到Toast的位置,因此无法将其删除。
我遇到了同样的问题,现在,我建议大家不要在Toast
内显示IntentService
,而是尝试运行一个commom服务,或者打开一个Activity,或尝试不同的东西展示吐司是完全必要的。
关闭应用程序时Toast不会消失的事实是IntentService
仍在运行,您必须重新启动系统或卸载App才能使Intent Service关闭。 / p>
答案 1 :(得分:8)
唯一的解释是你的Toast
被循环调用。您应该跟踪toast .show()
并查看它是否被无限次调用。
另一种视觉方式是做到这一点
Toast.makeText(SugarLoafContext.playbackTabContext, "No clips found.", duration).show();
Toast.makeText(SugarLoafContext.playbackTabContext, "Do you understand now?", duration).show();
我相信你会在一个懒散的时间内看到吐司......
答案 2 :(得分:0)
如果您的设备没有网络连接,并且您的应用会执行许可检查并显示结果Toast,也会发生这种情况。我的一个应用程序遇到了这个问题,因为我在检查应用程序获得许可时显示了Toast。如果没有网络连接,Toast会告诉用户仍然要进行许可证重试,并且当我连接Toast时,该功能会被删除,因为许可证检查可以正常工作。