在ondestroy()之后,handler不会更新UI

时间:2017-04-12 08:01:02

标签: android multithreading user-interface handler

我将一个Handler声明为活动中的全局变量。该处理程序从线程接收消息并更新de UI。

一切正常,直到将应用程序发送到后台,才会调用onDestroy。

当我回到应用程序时,线程不断向处理程序发送消息,它会在UI上进行更改,但这些更改不再显示。

我不想在暂停后停止该线程,因为即使应用程序在后台,它也必须读取我需要的一些信息。

我怎样才能使这个工作?

这是声明为全局变量的处理程序:

Handler hRefreshData=new Handler() {
    @Override
    public void handleMessage(Message msg) {
        edText2 = (EditText) findViewById(R.id.textarea2);
        edText2.setTextAlignment(View.TEXT_ALIGNMENT_TEXT_START);
        edText2.setTextSize(20);
        edText2.setBackgroundColor(Color.rgb(255, 255, 255));
        edText2.setText("");
        for (int i = 0; i < tag_db_index; i++) {
            if (tag_db[i].getActive() == TRUE) {
                edText2.append("[" + i + "]\t");
                edText2.append("ANT " + tag_db[i].tag.getAntenna() + "\t");
                edText2.append("\n");
            }
        }
    }

这是线程,当用户按下按钮时启动:

    thrRead = new Thread() {
        public void run() {
            while (bRunningRead) {

                // El siguiente método realiza sólo lectura (la conexión ya está abierta)
                aReadTags = lectura();
                processTags();
                try{
                    semaforo.acquire();
                    copyaReadTags();
                    semaforo.release();
                }
                catch(InterruptedException e)
                {

                }

                Message m = new Message();
                if (bRunningRead)
                    hRefreshData.sendMessage(m);

            }

        }
    };
    thrRead.start();

1 个答案:

答案 0 :(得分:0)

我使用了线程。我没有使用处理程序,而是使用了广播接收器。我需要的全局变量,我将它们保存在应用程序级别中,这样当活动中调用onDestroy时我就不会丢失它们。