【问题标题】:Can't get background thread to work unless I use static methods. What are the alternatives?除非我使用静态方法,否则无法让后台线程工作。有哪些替代方案?
【发布时间】:2011-06-02 00:03:57
【问题描述】:

我正在使用 Eclipse 开发一个 Android 应用程序来绘制蓝牙数据。主要组件是蓝牙活动、蓝牙活动创建的后台线程和绘图活动。

从 Logcat 中我知道,即使在我将活动从蓝牙活动切换到绘图活动之后,后台任务也会继续运行并产生蓝牙数据。

我在后台线程中找到了将 BluetoothData 写入 Logcat 的方法。所以我决定使用这种方法将数据数据传递给 Plotting Activity 的 plotData() 方法,如下所示:

    PlottingActivity plottingActivity = new PlottingActivity();
    plottingActivity.plotData(BluetoothData);

但它不适用于作为常规实例方法的 plotData() 调用。为什么?

它不起作用,因为使用这种调用 plotData() 的形式(可能是糟糕的形式),不会调用 PlottingActivity 活动的 onCreate() 方法。这至少会导致 redraw() 方法出现空指针异常,因此不会重绘或绘制绘图。

所以这就是它不起作用的原因。但是是什么让它起作用呢?感兴趣的?使 plotData() 成为静态方法。效果很好。实时剪辑。看起来像示波器。

但我收到了关于此解决方案的负面反馈(可能不是线程安全的或其他什么)我现在应该寻求替代解决方案。 [不是讨论]。只是使用后台线程和实例方法的真实、实用、明智的替代方案。

【问题讨论】:

    标签: android multithreading static background handler


    【解决方案1】:

    您无法将数据从一项活动传输到另一项活动,因为一次只能激活一项活动。它使用静态成员的原因是因为类定义存在,但活动引用的创建的对象不再存在;当新活动发生时,它们被垃圾收集。

    无论哪个活动处于活动状态,您都需要创建一个保持活动状态的服务。

    【讨论】:

    • 是的,我知道我们不能在 Android 中进行并发活动。如果生产者必须是静态的才能让我的应用程序工作,我会接受你的垃圾收集理论。但只有消费者必须是静态的才能工作。
    • 您的答案不正确。请尝试修复它,以便我接受它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多