我有一个监视套接字连接的服务.当连接丢失时,需要显示Toast,通知用户它正在重新连接.这是第一次工作正常.之后,我在日志中看到了enqueueToast,但是没有显示吐司.任何想法都赞赏我以为这会是一件容易的事情,但是我一定是缺少一些东西.
日志条目
INFO/NotificationService(118): enqueueToast pkg=com.abc
callback=android.app.ITransientNotification$Stub$Proxy@43f7b100
duration=1
调用Toast的代码
public class ConnectionService extends Service { ..... public void restartConnection() { try { Log.i(this.toString(),"Attempting to reconnect..."); // increase the wait between each retry until the max is reached int sleepTime = reconnectCounter * MIN_RECON_WAIT; if (sleepTime > MAX_RECON_WAIT) { sleepTime = MAX_RECON_WAIT; } String msg = "The connection has been lost. Restart attempt will start in: " + sleepTime/1000 + " seconds"; Log.i(this.toString(),msg); Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_LONG).show(); Thread.sleep(sleepTime); // increment the counter reconnectCounter++; this.startConnectionThread(); } catch (Exception e) { Log.e(this.toString(),"Exception: " + e.toString()); e.printStackTrace(); } }// end retartConnection
解决方法
是的,你可以使用runOnUiThread,这是一个合法的方式.
此外,您可以尝试使用Handler替代方案.无论哪种方式,它应该工作.
此外,您可以尝试使用Handler替代方案.无论哪种方式,它应该工作.
这是我头上的一些代码.我现在没有SDK来测试它,但我认为它应该给你一个一般的想法.
public class ConnectionService extends Service { private Handler handler = new Handler(); public void restartConnection(){ int sleepTime = reconnectCounter * MIN_RECON_WAIT; if (sleepTime > MAX_RECON_WAIT) { sleepTime = MAX_RECON_WAIT; } String msg = "The connection has been lost. Restart attempt will start in: " + sleepTime/1000 + " seconds"; (new Timer()).schedule( new TimerTask() { public void run() { handler.post(new Runnable() { public void run() { Toast.makeText(getApplicationContext(),"msg",Toast.LENGTH_LONG).show(); reconnectCounter++; this.startConnectionThread() } }); } },sleepTime); }//end restartConnection }//end ConnectionService
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。