我有一个关于异步任务的基本问题。
我是Android编程的初学者,很抱歉这个问题。

我要在doinbackground中打开一个套接字。

  doInBackground(... ) {
    Socket socket = null;
    DataOutputStream dataOutputStream = null;
    DataInputStream dataInputStream = null;
    try {
        socket = new Socket(192.168.0.1, 2000);
        dataOutputStream = new DataOutputStream(socket.getOutputStream());
        dataInputStream = new DataInputStream(socket.getInputStream());
  }}


AsyncTask完成后,套接字会发生什么情况? (一旦doInBackground和OnPostExecute通过。)

套接字仍然可用吗?还是会被垃圾收集器删除?

下一个问题,但实际上是相同的背景。

在AsyncTask完成后,我在doInBackground中实例化的类的实例会怎样? (一旦doInBackground和OnPostExecute通过。)

doInBackground(... ) {
IPConnection ipcon = new IPConnection();
}


-------------------------------------------------- -------------------

编辑:

如何从Asynctask中的对象创建对MainActivity的引用?

编辑2:

这是对主线程的引用吗?
该代码示例中的垃圾收集器是否不会删除这些对象?

public class ClientActivity extends Activity {


private IPConnection ipcon;

private Socket Testsocket;

public class IPConnection extends AsyncTask<String, String, IPConnection> {

    @Override
    protected IPConnection doInBackground(String... message) {

         ipcon = new IPConnection();


        ipcon.run();

        return null;
    }

  }

}


先感谢您。

最佳答案

套接字仍然可用吗?还是会被垃圾删除
  集电极?


没有套接字将不可用,并且将被垃圾收集器删除,因为它没有任何引用


  我实例化到的类的实例发生了什么
  AsyncTask完成后是否要执行doInBackground? (立刻
  doInBackground和OnPostExecute已通过。)


与上面相同,ipconnection不包含任何引用,因此将由垃圾收集器收集

如果您想将其传递给活动,则可以创建一个界面

public interface AsyncResultPasser {
    void passSocket(Socket socket);
    void passIPconnection(IPConnection ipcon);
}


然后在asynctask类中,您必须添加

public AsyncResultPasser delegate = null;


并且不要忘记在执行异步任务之前先进行设置

public class YourActivity implements AsyncResponse{
   YourAsyncTask asyncTask = new YourAsyncTask ();
    @Override
    public void onCreate(Bundle savedInstanceState) {
     asyncTask.delegate = this;
    }


   void passSocket(Socket socket){
     //you can get your socket here
   }

   void passIPconnection(IPConnection ipcon){
     //you can get your ipconnection here
   }
}


并只需使用delegate.passSocket(socket)delegate.passIPconnection(ipcon)

希望我的回答可以对您有所帮助:)

10-06 14:03
查看更多