【问题标题】:Strange behavior in implementations of abstract Activity抽象 Activity 实现中的奇怪行为
【发布时间】:2012-02-10 09:52:36
【问题描述】:

我遇到了一个相当奇怪的问题。

我有一个抽象的 Activity 创建一些线程,并通过调用抽象的 handleEvent() 方法使用 Handler 处理消息。

在某些事件中,实现此抽象父活动的许多子活动之一是使用意图创建的 - 正常方式。

现在来说奇怪的部分:这些子活动中的每一个都实现并覆盖了抽象活动的 handleEvent() 方法。

但是,任何子活动中的 handleEvent() 方法——除了第一个——永远不会被调用!

有人可以解释这种行为吗?

试图更清楚:

Abstract Parent 接收事件-> 创建 Activity ChildA 抽象父接收事件 -> 创建活动 ChildB Abstract Parent 接收事件 -> Create Activity ChildC

Parent 接收到应该处理的事件,handleEvent() - 但只有 ChildA 的 handleEvent 方法被调用 - 即使 ChildB 或 ChildC 是活动的 Activity。

有人吗?

【问题讨论】:

    标签: android inheritance event-handling thread-safety handler


    【解决方案1】:

    发生这种情况是因为:

    Each Handler instance is associated with a single thread and that thread's message queue

    这意味着如果在一个线程中创建处理程序,则不会在另一个线程中接收到消息。要克服这个问题,请以这种方式创建Handler

    Handler yourHandler = new Handler(Looper.getMainLooper());
    

    这会将Handler 与主(UI)线程相关联。

    【讨论】:

    • 处理程序在抽象(父)活动中。处理程序接收所有消息就好了。但是当调用在不同子活动中实现的handleEvent() 方法时,只有一个handleEvent() 方法被执行——第一个孩子。我希望执行所有子活动中的所有 handleEvent() 方法。
    • 那么你应该提供一些代码 - 从你的问题中不清楚你是如何开始活动的,你的类层次结构是什么等等。
    猜你喜欢
    • 2011-10-04
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多