【问题标题】:Handler: repeating code on android处理程序:在 android 上重复代码
【发布时间】:2013-05-10 21:50:13
【问题描述】:

我遇到了这个问题,我在活动 A 中有一个处理程序,用于显示一些消息 取决于 Message.what 属性,到目前为止,我得到了由 Activity A 启动的第二个 Activity(Activity B),我需要来自 Activity A 的相同处理程序才能使用它 在活动 B 上(我尝试了很多东西并用谷歌搜索,但什么也没有)我最终复制了代码 从 A 到 B 的处理程序,但我真的知道这是错误的(不确定处理程序是否需要),在这里我将发布一些我找到并尝试过的解决方案:

静态变量:Accessing instance of the parent activity?,它可以工作,但有时静态成员会变为 null,因为不再加载该类,因为有些人说这可能会导致一些关于静态成员留在内存中的泄漏我做了一些技巧带有 Activity 状态(当 Activity A 调用 onDestroy 时将其设置为 null, 在 Activity 的 onResume 和 onCreate 方法上设置引用“静态变量”= this A,在此之后,当我们丢失加载的类时,代码仍然会在“静态变量”处出现预期的 NullPointerException。

我尝试的另一件事是 MyOwnHandler(由我扩展 Handler 并实现 Serializable 创建的一个类,试图通过 Intent.putExtra 传递它),但是当我想到这个想法时,我注意到 Handler 有一些带有 final 的方法。

对这个问题有什么建议吗?我想将 Activity A 上的 Handler 重用到 Activity B, 提示:如果我在 Activity B 代码中获得了 Activity A 的确切运行实例,则可以这样做,如果需要一些示例,我可以带来一些以防万一它们是绝对必要的。

编辑:根据需要。

private  Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
            Toast toast;
            switch (msg.what) {

            case 3:
                toast = Toast.makeText(getBaseContext(),
                        "The user is already saved.", Toast.LENGTH_LONG);
                toast.setGravity(Gravity.CENTER_HORIZONTAL
                        | Gravity.CENTER_VERTICAL, 0, 0);
                toast.show();
                break;
            case 2:
                toast = Toast.makeText(getBaseContext(),
                        "The entered e-mail couldn't be found in database.",
                        Toast.LENGTH_LONG);
                toast.setGravity(Gravity.CENTER_HORIZONTAL
                        | Gravity.CENTER_VERTICAL, 0, 0);
                toast.show();
                break;
}
}
};

这个 Handler 成员是私有的,可以是公共的或默认的,但仍然不相关。 好吧,假设这段代码在活动 A 中,我想对活动 B 使用相同的代码,活动 B 由 A 通过 Intent 启动,我今天正在尝试@pskink 答案,似乎这就是解决方案,无论如何我d 仍在听命题。

问候。

【问题讨论】:

  • 你能提供一些代码吗?因为我不确定你真正想要什么。

标签: android handler


【解决方案1】:

您尝试做的事情可能通过使用 Messenger http://developer.android.com/reference/android/os/Messenger.html 来完成

【讨论】:

  • +1,我将 Handler 作为参数传递给 Activity A 中的 Messenger 对象,并通过 intent.getParcelableExtra(String, Object) 将其传递给 Activity B,效果很好,我只需要调整一些带有 Message.what 属性的东西。谢谢,问候。
猜你喜欢
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 2011-08-18
  • 1970-01-01
相关资源
最近更新 更多