Java 在非UI线程中执行一些Android UI操作

Java 在非UI线程中执行一些Android UI操作,java,android,multithreading,user-interface,Java,Android,Multithreading,User Interface,有没有办法在非UI线程中进行UI更改?简短的问题。有很多方法可以做到这一点,请使用。简短的回答 提示:可以在pre-postcexecute/runOnUiThread/Handler类中完成UI工作检查该类。或者看看这些类似的问题: 使用或使用以下代码 runOnUiThread(new Runnable() { @Override public void run() { // U

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

有很多方法可以做到这一点,请使用。简短的回答

提示:可以在pre-postcexecute/runOnUiThread/Handler类中完成UI工作

检查该类。或者看看这些类似的问题:

使用或使用以下代码

    runOnUiThread(new Runnable()
    {           
        @Override
        public void run()
        {
            // Ui Stuff here                
        }
    });

尝试探索runOnUIThread()


)

如果您不想使用异步任务,请尝试在您的主要活动中使用带有内部类(ResponseHandler)的observer模式,很抱歉,我无法正确设置格式,但我相信您已经明白了

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();
}

我尝试了+tmho答案,但仍然出现以下错误:

E/AndroidRuntime(****):android.view.ViewRootImpl$CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图

我最终将其与+InSharabh方式结合起来,如下所示:

private class ResponseHandler implements Observer, Runnable {

    Activity act;

    public ResponseHandler(Activity caller) {
        act = caller;
    }

    @Override
    public void update (Observable obj, Object arg) {
        act.runOnUiThread(this);
    }

    @Override
    public void run() {
        //update UI here
    }
}

谢谢你们两位。

基本的问题是,线程在我的主要活动之外的其他类中,它在无限循环(套接字等)中执行某些操作。