Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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_Android Asynctask_Broadcastreceiver - Fatal编程技术网

如何在android中运行并行操作?

如何在android中运行并行操作?,android,multithreading,android-asynctask,broadcastreceiver,Android,Multithreading,Android Asynctask,Broadcastreceiver,如何在Android中对主应用程序运行并行操作(进程) 我知道,有很多方法可以做到这一点:线程、任务、处理程序等等。。。 这是我选择的方式。但我认为它占用了大量内存,并且在中断调用中不会关闭 checkReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // TODO: Check is this a

如何在Android中对主应用程序运行并行操作
(进程)

我知道,有很多方法可以做到这一点:
线程
任务
处理程序
等等。。。 这是我选择的方式。但我认为它占用了大量内存,并且在中断调用中不会关闭

checkReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
            // TODO: Check is this a good way to handle threads
            Thread t = new Thread() {
                @Override
                public void run() {
                    internetConnectionManager.TryConnect();
                    this.interrupt();
                }
            };
            t.start();                  
        }               
    }
};
使用处理程序

若你们想停止处理程序,那个么向接收者发送一个带有某个值的意图,例如(“退出处理程序”) 然后调用remove callback,在处理程序内部,您可以使用ACTION开关处理其余部分
您还可以使用intentservice,因为您的arroach有两个问题:

  • 不应在
    onreceive
    方法中启动线程。原因如下:
这对你在工作中能做什么有着重要的影响 onReceive(上下文、意图)实现:任何需要 异步操作不可用,因为您需要 从函数返回以处理异步操作,但在 此时广播接收器不再处于活动状态,因此 系统可以在异步操作之前终止其进程 完成

  • 其次,调用
    Thread.currentThread().interrupt()
    在您的示例中没有任何意义,因为您的线程已经在该行完成并将完成,而且您也没有检查
    interrupted
    标志
在我看来,更好的方法是从您的
onReceive
代码开始一个简单的操作。一个简单的教程。

重要编辑基于Funkthemank的评论:

如果广播来自警报或外部事件,则在
onReceive
返回后不久(即使您创建了服务),您的设备也可能进入睡眠状态。如果是这种情况,您应该从支持库扩展,而不是使用常规的
BroadCastReceiver

您的问题是什么?
这个。中断将不会编译。我相信您的意思是调用类似于
Thread.currentThread().interrupt()
的东西。另外,当找到
TryConnect()
时,是否需要接收结果?不,我不需要结果。我只需要运行这个函数,我使用它来使用异步任务处理程序不是异步的,除非您有多个处理程序绑定到为不同线程创建的循环器。。发送到单个处理程序的消息一次只能处理一条,如果一条消息被阻塞,其余的消息将不得不等待。另外值得注意的是,如果广播来自报警或外部事件,则在onReceive返回后,您的设备可能会很快进入睡眠状态(即使您创建了线程或服务)-支持库中有一个助手类:我的广播确实来自alarm(manager)。那么我该怎么办呢?@FunkTheMonk我几乎一字不差地在我的回答中插入了你的评论,希望你不介意。感谢您指出这一点,我以前从未想过。在我的闹钟中,我使用RTC_WAKEUP,在这种情况下,我还需要WakefulBroadcastReceiver?@Alex让您的类实现parcelable很简单,然后您可以将对象放入意图并在服务中提取,这是正常的方式。或者,如果您的对象在逻辑上表示全局访问状态,或者可以将其设置为单例,则可以使所有组件都全局访问它。