Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自子线程的Android广播_Android_Multithreading_Broadcastreceiver_Broadcast - Fatal编程技术网

来自子线程的Android广播

来自子线程的Android广播,android,multithreading,broadcastreceiver,broadcast,Android,Multithreading,Broadcastreceiver,Broadcast,我正在尝试使用广播器将消息从子线程发送到主UI线程。所以我的活动上有一个广播接收器(我讨厌多个),我希望能够从一个子线程(runnable)向它们发送消息 以下是我在子线程中所做的操作: Intent broadcastIntent = new Intent(); broadcastIntent.setAction(ResponseReceiver.ACTION_RESP); broadcastIntent.putExtra("Controller", "connect"); context.s

我正在尝试使用广播器将消息从子线程发送到主UI线程。所以我的活动上有一个广播接收器(我讨厌多个),我希望能够从一个子线程(runnable)向它们发送消息

以下是我在子线程中所做的操作:

Intent broadcastIntent = new Intent();
broadcastIntent.setAction(ResponseReceiver.ACTION_RESP);
broadcastIntent.putExtra("Controller", "connect");
context.sendBroadcast(broadcastIntent);
    new Thread(new SomeThread(myContext)).start();



    public class SomeThread implements Runnable
    {
        Context context;
        public SomeThread(Context ctx)
        {
            context = ctx;
        }

        public void run()
        {
            // Do stuff with context.
        }
    }

但问题是我如何定义上下文?它给出了异常“上下文无法解析”,如果我不使用它,它将找不到“sendBroadcast”方法。那么如何做到这一点呢?

您可以将活动或应用程序上下文传递给线程

如果您正在参加活动,您可以:

    Context myContext;
    myContext = this;

然后在上下文中传递给您的子线程:

Intent broadcastIntent = new Intent();
broadcastIntent.setAction(ResponseReceiver.ACTION_RESP);
broadcastIntent.putExtra("Controller", "connect");
context.sendBroadcast(broadcastIntent);
    new Thread(new SomeThread(myContext)).start();



    public class SomeThread implements Runnable
    {
        Context context;
        public SomeThread(Context ctx)
        {
            context = ctx;
        }

        public void run()
        {
            // Do stuff with context.
        }
    }

您可以将活动或应用程序上下文传递给线程

如果您正在参加活动,您可以:

    Context myContext;
    myContext = this;

然后在上下文中传递给您的子线程:

Intent broadcastIntent = new Intent();
broadcastIntent.setAction(ResponseReceiver.ACTION_RESP);
broadcastIntent.putExtra("Controller", "connect");
context.sendBroadcast(broadcastIntent);
    new Thread(new SomeThread(myContext)).start();



    public class SomeThread implements Runnable
    {
        Context context;
        public SomeThread(Context ctx)
        {
            context = ctx;
        }

        public void run()
        {
            // Do stuff with context.
        }
    }

是的,没错。问题是我想避免:)最初我使用处理程序向活动发送消息,每次活动更改时,我都必须将处理程序引用发送到子线程。这和那没什么区别:(废话。啊,如果你只想从任何地方访问上下文,你可以尝试一下这个线程中的一些想法:是的,没错。问题是我想避免:)最初我用处理程序向活动发送消息,每次活动更改时,我都必须将处理程序引用发送到子线程。这和那没什么区别:(废话。啊,如果你只想从任何地方访问上下文,你可以尝试一下这个帖子中的一些想法: