在非UI线程中做一些Android UI的东西

Kno*_*bik 8 java user-interface multithreading android

有没有办法在非UI线程中进行UI更改?简短的问题.

ing*_*abh 9

使用Handler或使用下面的代码

    runOnUiThread(new Runnable()
    {           
        @Override
        public void run()
        {
            // Ui Stuff here                
        }
    });
Run Code Online (Sandbox Code Playgroud)


Ren*_*eno 5

有很多方法可以做到这一点,使用AsyncTask或Threads.简短的回答.

提示:UI的东西可以在pre-postExecute/runOnUiThread/Handler类中完成


tmh*_*mho 5

如果您不想使用AsyncTask,请在主活动中尝试使用内部类(ResponseHandler)的观察者模式,抱歉我无法正确格式化,但我确定您已经明白了

public class WorkerThread extends Observable implements Runnable {
public void run() {
    try {
            DoSomething();
            String response = "Doing something";
            setChanged();
            notifyObservers( response );
            DoSomethingElse();
            String response = "Doing something else";
            setChanged();
            notifyObservers( response );
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}
private void DoSomething(){
}
private void DoSomethingElse(){
}


public class MainActivity{
public class ResponseHandler implements Observer {
    private String resp;
    public void update (Observable obj, Object arg) {
        if (arg instanceof String) {
            resp = (String) arg;
            //Write message to UI here ie System.out.println("\nReceived Response: "+ resp );
            //or EditText et = (EditText)findViewById(R.id.blah);
            // blah.SetText(resp);
        }
    }
}
private void doStuffAndReportToUI(){
    final WorkerThread wt = new WorkerThread();
    final ResponseHandler respHandler = new ResponseHandler();
    wt.addObserver( respHandler );
    Thread thread = new Thread(wt);
    thread.start();
}
Run Code Online (Sandbox Code Playgroud)