0

非同期タスクについて基本的な質問があります。私は 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;
    }

  }

}

前もって感謝します。

4

2 に答える 2

0

終了するとすぐにdoInBackground()、すべてのローカル インスタンスがガベージ コレクションに使用できるようになりonPostExecute()ますdoInBackground()。このようなインスタンスは、onPostExecute()終了後に利用可能になります。ただし、これらのインスタンスをさらにどこかに送信しない場合に限ります。

于 2013-08-04T10:50:15.457 に答える