首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android中处理程序的post()和sendMessage()有什么区别?

android中处理程序的post()和sendMessage()有什么区别?
EN

Stack Overflow用户
提问于 2019-11-17 08:23:48
回答 1查看 585关注 0票数 0

我发现了post()sendMessage()之间的一些信息差异

如果要组织发送到ui (来自后台线程的消息)或ui函数的内容,则使用looper.

  • sendmessage()−将消息从后台线程发送到主线程。你应该使用sendMessage().

post :Post()很清楚,我们从后台线程到主线程发布了一些内容。但是sendMessage()有什么不同?

EN

回答 1

Stack Overflow用户

发布于 2019-11-17 10:40:39

post()sendMessage()在内部的工作方式相同,但是对于sendMessage(),我们可以传递消息对象。

EXAMPLES

使用员额:

代码语言:javascript
复制
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

代码语言:javascript
复制
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();
                }
            });
        }
    }


}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58898740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档