我发现了post()和sendMessage()之间的一些信息差异
如果要组织发送到ui (来自后台线程的消息)或ui函数的内容,则使用looper.
post :Post()很清楚,我们从后台线程到主线程发布了一些内容。但是sendMessage()有什么不同?
发布于 2019-11-17 10:40:39
post()和sendMessage()在内部的工作方式相同,但是对于sendMessage(),我们可以传递消息对象。
EXAMPLES
使用员额:
public class MainActivity extends AppCompatActivity {
Handler mHandler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Handler Started", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
initHandler();
}
});
}
private void initHandler() {
new Thread(new Runnable() {
@Override
public void run() {
try{
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this,"Executed in background thread",Toast.LENGTH_LONG).show();
}
});
}catch(Exception ex){
ex.printStackTrace();
Toast.makeText(MainActivity.this,ex.getMessage(),Toast.LENGTH_LONG).show();
}
}
}).start();
}
}使用sendMessage
public class MainActivity extends AppCompatActivity {
IncomingHandler msgHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
msgHandler = new IncomingHandler(MainActivity.this);
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Handler Started", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
initHandler();
}
});
}
private void initHandler() {
new Thread(new Runnable() {
@Override
public void run() {
try{
Message msg = msgHandler.obtainMessage();
Bundle bundle = new Bundle();
bundle.putString("MSG_KEY", "Executed in background thread");
msg.setData(bundle);
msgHandler.sendMessage(msg);
}catch(Exception ex){
ex.printStackTrace();
Toast.makeText(MainActivity.this,ex.getMessage(),Toast.LENGTH_LONG).show();
}
}
}).start();
}
private static class IncomingHandler extends Handler{
Handler mHandler = new Handler();
Context context;
public IncomingHandler(Context context) {
this.context = context;
}
@Override
public void handleMessage(@NonNull final Message msg) {
super.handleMessage(msg);
Bundle bundle = msg.getData();
final String displayMessage = bundle.getString("MSG_KEY");
mHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context ,displayMessage,Toast.LENGTH_LONG).show();
}
});
}
}
}https://stackoverflow.com/questions/58898740
复制相似问题