Java 是否可以在活动中重载onProgressUpdate?

Java 是否可以在活动中重载onProgressUpdate?,java,android,multithreading,android-asynctask,Java,Android,Multithreading,Android Asynctask,我正在尝试接受来自客户端的套接字连接。 但是在我的AsyncTask中,我遇到了两种需要更新UI线程的情况。第一种情况是,一旦连接了套接字,它就应该更改当前的内容视图。第二种情况是,我通过publishProgress()在UI上不断更新对象流。 我该怎么做呢 public class MainActivity extends AppCompatActivity { myCustomDrawingView view; .... .... . public stat

我正在尝试接受来自客户端的套接字连接。 但是在我的
AsyncTask
中,我遇到了两种需要更新UI线程的情况。第一种情况是,一旦连接了套接字,它就应该更改当前的内容视图。第二种情况是,我通过
publishProgress()
在UI上不断更新对象流。 我该怎么做呢

public class MainActivity extends AppCompatActivity {
   myCustomDrawingView view;
   ....
   ....
   .

   public static MainActivity getContext(){return context;}
   ....
   ..
   public class myCustomDrawingView extends View {
   ..
   ..
   }
   setNewContentView(){
     view = new myCustomDrawingView(this);
     setContentView(view);
   }
}




class ServerTask extends AsyncTask<Void, Action, Void>
{
    private WeakReference<MainActivity> mainActivity;
    private Action action;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        mainActivity = new WeakReference<>(MainActivity.getContext());
    }

    @Override
    protected Void doInBackground(Void... voids) {
        ObjectInputStream stream;

        try{
            mainActivity.get().server = new ServerSocket(3107);
            mainActivity.get().socket = mainActivity.get().server.accept();
            stream = new ObjectInputStream(mainActivity.get().socket.getInputStream());

            (mainActivity.get()).setNewContentView(); 
            /*I know this won't work....
              But I want something like this to happen. 
              What are Alternatives?*/

            while(true)
            {
                if(isCancelled()){
                    break;
                }
                action = (Action)stream.readObject();
                publishProgress(action);
            }
        }catch (Exception exception)
        {
            exception.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onProgressUpdate(Action... actions) {
        super.onProgressUpdate(actions);
        ((mainActivity.get()).myCustomDrawingView).draw(actions[0]);
    } 
}
public类MainActivity扩展了AppCompatActivity{
myCustomDrawingView;
....
....
.
公共静态MainActivity getContext(){return context;}
....
..
公共类myCustomDrawingView扩展了视图{
..
..
}
setNewContentView(){
视图=新的myCustomDrawingView(此视图);
setContentView(视图);
}
}
类ServerTask扩展了AsyncTask
{
私人WeakReference主要活动;
私人行动;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
mainActivity=newweakreference(mainActivity.getContext());
}
@凌驾
受保护的空位背景(空位…空位){
目标输出流;
试一试{
mainActivity.get().server=newserversocket(3107);
mainActivity.get().socket=mainActivity.get().server.accept();
stream=newObjectInputStream(mainActivity.get().socket.getInputStream());
(mainActivity.get()).setNewContentView();
/*我知道这行不通。。。。
但我希望这样的事情发生。
什么是替代方案*/
while(true)
{
如果(isCancelled()){
打破
}
action=(action)stream.readObject();
出版进度(行动);
}
}捕获(异常)
{
异常。printStackTrace();
}
返回null;
}
@凌驾
受保护的void onProgressUpdate(操作…操作){
super.onProgressUpdate(操作);
((mainActivity.get()).myCustomDrawingView.draw(操作[0]);
} 
}

设置回调..看起来很有趣!我会试一试,然后告诉你它是否有效。谢谢嗯,
ServerTask
似乎是一个具体的类。如果它是一个内部类,那么您可以直接访问外部类属性。您确定如果我将它设置为内部类,那么它不会引起任何问题吗。我猜你这么说是因为我使用了弱引用和上下文,不是吗?而且,即使我将其作为一个内部类,它也不会改变我不能从后台任务中接触UI线程的事实。这件事还是老样子