没有UIHandler的Android处理程序UPATE UI



此代码可以正常工作并更新我的"文本视图",还显示"吐司"这是我的头痛,因为我试图通过不包括我的UIHandler在内,因为它是更新我的UI线程的桥梁,但我的活动没有单个错误进行更新???这不是因为自定义HandlerThread应该是另一个线程

为什么会发生这种情况?

我的活动

公共类测试范围扩展了碱性{

Runnable task;
@BindView(R.id.send_test_message)
Button send_test_message;
private Handler mUiHandler = new Handler();
private MyWorkerThread mWorkerThread;
@Override
public void initViews() {
}
@Override
public void attachViewsListeners() {
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.test_activity);
    ButterKnife.bind(this);
    task = new Runnable() { ///this is normally work I have no problem with 
                            ///that 
        @Override
        public void run() {
                mUiHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        send_test_message.setText("Change--->1");
                    }
                });
            }

    };

}

@Override
protected void onStart() {
    super.onStart();
    mWorkerThread = new MyWorkerThread("myWorkerThread");
    mWorkerThread.start();
    mWorkerThread.prepareHandler();
    mWorkerThread.postTask(task);
    mWorkerThread.postTask(new Runnable() {  /// why this task work with no 
                                            ///error  ?
        @Override
        public void run() {
            send_test_message.setText("Change--->2");
        }
    });
}
@Override
protected void onDestroy() {
    mWorkerThread.quit();
    super.onDestroy();
}

我的处理程序

//MyWorkerThread.java
public class MyWorkerThread extends HandlerThread {
    Handler mWorkerHandler;
    public MyWorkerThread(String name) {
        super(name);
    }
    public void postTask(Runnable task) {
        mWorkerHandler.post(task);
    }
    public void prepareHandler() {
    mWorkerHandler = new Handler(getLooper());
Log.e("MyWorkerThread--->",Looper.myLooper().getThread().getName()); //-->main
Log.e("MyWorkerThread--->",getLooper().getThread().getName());//-->//myWorkerThread
Log.e("MyWorkerThread--->",Thread.currentThread().getName()); //-->main
    }
}

我遵循此链接作为引用

是我的线程在mainthread或getlooper()Intialize my my上运行的线程 带有Mainthread Looper的HandlerThread是那些日志消息是true

请照亮我

在调试一天后,我发现,如果我向我的 当我得到"只有创建视图层次结构的原始线程可以触及其视图"时,MorterThread带有Sleep()。" 就像应该..但是,直到我知道为什么没有它不起作用 我希望这会有所帮助。

   try {
                        TimeUnit.SECONDS.sleep(2);
                        send_test_message.setText("Change--->");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

相关内容

  • 没有找到相关文章

最新更新