【问题标题】:sending broadcast intent from runnable从 runnable 发送广播意图
【发布时间】:2010-07-10 07:32:19
【问题描述】:

我想从一个新线程发送广播。

这是我尝试过的:

        new Thread(new Runnable() {
        public void run() {
            //some other code for timing.
            // ..
            // ..
            Intent broadcastIntent = new Intent();
            broadcastIntent.setAction(Intent.ACTION_ANSWER);
            this.sendBroadcast(broadcastIntent);
        }
    }).start();

但我当然需要上下文..这行不通。 我该如何处理。

【问题讨论】:

    标签: android multithreading broadcast


    【解决方案1】:

    我通常做的事情,虽然很老套,但如下:

    final Context mCtx = this;
    new Thread(new Runnable() {
        public void run() {
            //some other code for timing.
            // ..
            // ..
            Intent broadcastIntent = new Intent(mCtx, TargetClass.java);
            broadcastIntent.setAction(Intent.ACTION_ANSWER);
            this.sendBroadcast(broadcastIntent);
        }
    }).start();
    

    另外,请记住在 Intent 构造函数中包含目标 Java 类。

    希望对你有帮助!

    【讨论】:

    • 如果 Thread 对象是某个 Context 子类的内部类型的实例,这可能会有意义吗?而且没有 Thread.sendBroadcast 方法。正确的调用是 SomeActivityName.this.sendBroadcast(broadcastIntent)。
    • 对不起,我的意思是 mCtx.sendBroadcast(broadcastIntent)。
    • 不应该是Intent broadcastIntent = new Intent(mCtx, TargetClass.class);吗?
    • 我更喜欢 broadcastIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); broadcastIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    【解决方案2】:

    我也遇到过这个问题。

    这是我的解决方案。您在其中实现此功能的应用程序必须有一个 Activity。 因此,在该 Activity 中,为其自身创建一个静态变量并将其分配给它。

    例如:

    public class MyActivity extends Activity {
        static MyActivity thisActivity = this;
        //rest of the code goes here
    }
    

    现在,在线程中,执行以下操作:

    MyActivity.thisActivity.sendBroadcast(myintent);
    

    希望,这回答了你的问题!

    【讨论】:

    • 解决很多错误的好主意。
    • 静态活动是内存泄漏的一个步骤。永远不要那样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 2011-04-14
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多