Lau*_*nen 239
你可以通过调用一个做到这一点Activity的runOnUiThread,从你的线程方法:
activity.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(activity, "Hello", Toast.LENGTH_SHORT).show();
}
});
Run Code Online (Sandbox Code Playgroud)
mja*_*ard 60
我喜欢在我的活动中有一个方法showToast,我可以从任何地方打电话......
public void showToast(final String toast)
{
runOnUiThread(() -> Toast.makeText(MyActivity.this, toast, Toast.LENGTH_SHORT).show());
}
Run Code Online (Sandbox Code Playgroud)
然后,我经常MyActivity在任何这样的线程上从内部调用它...
showToast(getString(R.string.MyMessage));
Run Code Online (Sandbox Code Playgroud)
Chr*_*sCM 26
这与其他答案类似,但是针对新的可用api进行了更新,并且更加清晰.此外,不假设您处于活动上下文中.
public class MyService extends AnyContextSubclass {
public void postToastMessage(final String message) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(getContext(), message, Toast.LENGTH_LONG).show();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*ren 14
一种可以在任何地方工作的方法,包括从没有Activity或者的地方开始工作View,就是抓住Handler主线程并显示toast:
public void toast(final Context context, final String text) {
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
public void run() {
Toast.makeText(context, text, Toast.DURATION_LONG).show();
}
});
}
Run Code Online (Sandbox Code Playgroud)
这种方法的优点是它适用于任何Context,包括Service和Application.
yan*_*nko 10
像这样或这样,与Runnable显示的Toast.也就是说,
Activity activity = // reference to an Activity
// or
View view = // reference to a View
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
showToast(activity);
}
});
// or
view.post(new Runnable() {
@Override
public void run() {
showToast(view.getContext());
}
});
private void showToast(Context ctx) {
Toast.makeText(ctx, "Hi!", Toast.LENGTH_SHORT).show();
}
Run Code Online (Sandbox Code Playgroud)
有时,您必须从另一个Thread线程向UI线程发送消息.当您无法在UI线程上执行网络/ IO操作时,会发生这种情况.
下面的示例处理该场景.
Runnable在UI线程上运行.所以发布你Runnable的处理程序HandlerThreadRunnable并将其发送回UI线程并显示Toast消息.解:
HandlerThread:requestHandlerresponseHandler和覆盖handleMessage方法post一项Runnable任务requestHandlerRunnable的任务,呼吁sendMessage对responseHandlersendMessage结果调用handleMessage在responseHandler.Message并对其进行处理,更新UI示例代码:
/* Handler thread */
HandlerThread handlerThread = new HandlerThread("HandlerThread");
handlerThread.start();
Handler requestHandler = new Handler(handlerThread.getLooper());
final Handler responseHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
//txtView.setText((String) msg.obj);
Toast.makeText(MainActivity.this,
"Runnable on HandlerThread is completed and got result:"+(String)msg.obj,
Toast.LENGTH_LONG)
.show();
}
};
for ( int i=0; i<5; i++) {
Runnable myRunnable = new Runnable() {
@Override
public void run() {
try {
/* Add your business logic here and construct the
Messgae which should be handled in UI thread. For
example sake, just sending a simple Text here*/
String text = "" + (++rId);
Message msg = new Message();
msg.obj = text.toString();
responseHandler.sendMessage(msg);
System.out.println(text.toString());
} catch (Exception err) {
err.printStackTrace();
}
}
};
requestHandler.post(myRunnable);
}
Run Code Online (Sandbox Code Playgroud)
有用的文章:
handlerthreads和 - 为什么 - 你 - 应该待使用了他们,在你的Android的应用程序
Android的尺蠖处理程序,handlerthread-I
| 归档时间: |
|
| 查看次数: |
91786 次 |
| 最近记录: |