evt*_*evt 3 android sleep toast
当我尝试show();Toast 时,我有一个奇怪的问题.你会在下面看到两个由a分隔的try/catch and Thread.sleep();Toast.在这种情况下,第二个Toast toast2会显示但toast1不会显示.
如果我删除try/catch两个Toasts将显示没有问题.
我在其他地方看到过toast.show();在UI线程上发出请求,这可能会被其他操作冲突.我想知道这是否与我在这里遇到的问题相同Thread.sleep();如何解决这个问题?
谢谢
TestService.java
///Debug - Show a Toast
// Toast does NOT show up
Toast toast1 = Toast.makeText(context,"Service Started", Toast.LENGTH_SHORT);
toast1.show();
//Try to sleep for roughly 2 seconds
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Debug - Shows a Toast
Toast toast2 = Toast.makeText(context,"Sleep completed", Toast.LENGTH_SHORT);
toast2.show();
Run Code Online (Sandbox Code Playgroud)
在现实生活中,你可能会有一些逻辑而不仅仅是"睡觉",对吗?正确的android方式,根据您的示例,启动服务将通过在工作线程上执行它.这将确保您不会得到ANR.
你可以看起来像:
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPostExecute(Void result) {
Toast toast2 = Toast.makeText(context, "Sleep completed",
Toast.LENGTH_SHORT);
toast2.show();
}
@Override
protected void onPreExecute() {
Toast toast1 = Toast.makeText(context, "Service Started",
Toast.LENGTH_SHORT);
toast1.show();
}
@Override
protected Void doInBackground(Void... params) {
// Try to sleep for roughly 2 seconds
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}.execute();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3657 次 |
| 最近记录: |