gpt4 book ai didi

Android Application Init 和全局对象

转载 作者:行者123 更新时间:2023-11-30 03:33:20 24 4
gpt4 key购买 nike

您好,我是 Android 编程的新手,我在应用程序初始化方面遇到了一些问题。我会先解释应用程序结构,然后再解释问题。

应用程序有一个线程,它应该始终在数据报套接字上运行和监听。每当收到消息时,它都会采取适当的操作。在某些操作中,我需要 Context 对象,并且我还使用 Handler 对象将数据传递到 UI 线程。这两个对象都是通过主 Activity 的 OnCreate 方法在我的 Thread 类的构造函数中初始化的。现在我遇到的问题是,无论何时切换我的 Activity 或倾斜手机,都会重新创建主要 Activity 中的所有对象,并且我之前传递给 HandlerContext< 的 Thread 类的引用/strong> 无效。

我该如何处理这个问题。提前致谢。应用结构是这样的。

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

}
};

最佳答案

在管理具有应用程序生命周期的对象方面似乎有两种流派:

  • 单例
  • 应用对象

这是关于它的主题: Singletons vs. Application Context in Android?

我认为这主要取决于用例,在您的特定代码示例中,我更倾向于创建一个单例,它可以使 controlreceiver 保持 Activity 状态并可用于任何 Activity (更准确地说,单例将管理控制接收器)。

关于Android Application Init 和全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17041305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com