android中处理程序的post()和sendMessage()有什么区别
我发现android中处理程序的post()和sendMessage()有什么区别,android,Android,我发现post()和sendMessage() Post()− 它将把消息从后台线程发布到主线程 线程使用活套 sendmessage()− 如果您想组织发送到ui的内容 (来自后台线程的消息)或ui函数。你应该使用 sendMessage() 问题:Post()很清楚,我们将一些内容从后台线程发布到主线程。但是sendMessage()有什么不同呢post()和sendMessage()在内部的工作方式是相同的,但是对于sendMessage(),我们可以传递一个消息对象 示例 使用post:
post()
和sendMessage()
post()
和sendMessage()
在内部的工作方式是相同的,但是对于sendMessage()
,我们可以传递一个消息对象
示例
使用post:
使用sendMessage
post()
和sendMessage()
在内部的工作方式相同,但是对于sendMessage()
,我们可以传递消息对象
示例
使用post:
使用sendMessage
sendMessage
发送一个Message
对象,通过该对象可以检查handleMessage
内部的操作。它还有一个带有延迟的变量,比如Post..sendMessage
发送一个Message
对象,您可以通过该对象检查在handleMessage
中执行的操作。它还有一个类似于Post的延迟变体。。
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();
}
}
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();
}
});
}
}
}