こんにちは、Android プログラミングは初めてで、アプリケーションの初期化に問題がありました。最初にアプリの構造を説明し、次に問題を説明します。
アプリケーションには、Datagram ソケットで常に実行およびリッスンする必要があるスレッドがあります。メッセージが受信されるたびに、適切なアクションが実行されます。特定のアクションではContextオブジェクトが必要で、データを UI スレッドに渡すためにHandlerオブジェクトも使用します。これらのオブジェクトは両方とも、メイン アクティビティのOnCreateメソッドから渡すことによって、Thread クラスのコンストラクターで初期化されました。現在、アクティビティが切り替えられるか、電話を傾けるたびに、メイン アクティビティのすべてのオブジェクトが再作成され、前にHandlerとContextの Thread クラスに渡した参照が無効になるという問題が発生しています。
この問題をどのように処理すればよいですか。前もって感謝します。アプリ構成はこんな感じ。
public class MainActivity extends Activity {
private Context ctx;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Bundle bundle = msg.getData();
String mtype = bundle.getString("mtype");
// DO SOME STUFF HERE //
}
@Override
protected void onCreate(Bundle savedInstanceState) {
// OTHER INITIALIZATIONS //
ctx = this;
rxThread = new ControlReceiver(ctx, handler);
rxThread.start();
}
};
スレッドクラスはこんな感じ。
public class ControlReceiver extends Thread {
private Context context;
private Handler handler;
ControlReceiver(Context c, Handler h){
context = c;
handler = h;
}
public void run() {
// DO STUFF HERE //
// SEND MESSAGE TO UI //
msg = handler.obtainMessage();
bundle = new Bundle();
bundle.putString("mtype", "ECHTB");
msg.setData(bundle);
handler.sendMessage(msg);
}
};