【发布时间】:2019-09-26 16:53:32
【问题描述】:
我正在使用 UsbSerial (com.github.felHR85:UsbSerial:4.5) 将串行数据从虚拟串行端口(通过 USB)流式传输到我的应用程序。 MainActivity 有一个处理程序,用于处理来自 USB 服务的消息,类似于提供的示例:
https://github.com/felHR85/UsbSerial/blob/master/example/src/main/java/com/felhr/serialportexample/MainActivity.java
我的应用程序有几个活动,如果某些数据通过串行端口,其中许多活动的视图应该会改变。例如,TextView 可能需要更新显示的文本,Button 应启用或禁用。
为了在每个活动中操作onCreate 方法之外的视图,我尝试过的最简单的方法是将视图声明为private static,但我在很多地方都看到这是一种不好的做法。我将视图引用设置回 null,如此处所述(在“2.静态视图”下),我认为,以避免潜在的内存泄漏:https://blog.nimbledroid.com/2016/09/06/stop-memory-leaks.html
我仍然不喜欢 Android Studio 中的 Lint 指示“不要将 Android 上下文类放在静态字段中”这一事实。而且这种做法似乎普遍不受欢迎。
每个活动都有一个public static boolean isActive,在onResume 中设置true,在onPause 中设置false
来自MainActivity 的处理程序根据当前正在运行的活动(例如SecondActivity.isActive==true)决定如何处理传入的串行数据。然后它从当前正在运行的活动(例如SecondActivity.updateViews(serialdata))中调用public static 方法,该活动可以访问静态视图引用以执行它需要的操作(例如myTextView.setText(serialdata))
如果我不应该保留对视图的静态引用,有什么替代方法可以实现我所需要的,即从MainActivity 中的处理程序更新SecondActivity 中的视图元素,而SecondActivity 是已经运行了吗?
【问题讨论】:
-
Activity 可以在您离开后立即被杀死,因此在暂停后运行处理程序是违反生命周期的。转到开发者选项并启用“不保留活动” - 这会模拟内存不足的环境,在这种环境中,所有活动都会在您离开后立即被终止。
标签: android android-activity view static