相关疑难解决方法(0)

如何修复android.os.NetworkOnMainThreadException?

我在为RssReader运行我的Android项目时遇到错误.

码:

URL url = new URL(urlToRssFeed);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader xmlreader = parser.getXMLReader();
RssHandler theRSSHandler = new RssHandler();
xmlreader.setContentHandler(theRSSHandler);
InputSource is = new InputSource(url.openStream());
xmlreader.parse(is);
return theRSSHandler.getFeed();
Run Code Online (Sandbox Code Playgroud)

它显示以下错误:

android.os.NetworkOnMainThreadException
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

java android android-networking networkonmainthread

2308
推荐指数
40
解决办法
115万
查看次数

如何在swift中使用后台线程?

如何在swift中使用线程?

dispatchOnMainThread:^{

    NSLog(@"Block Executed On %s", dispatch_queue_get_label(dispatch_get_current_queue()));

}];
Run Code Online (Sandbox Code Playgroud)

multithreading ios swift dispatch-queue

298
推荐指数
12
解决办法
23万
查看次数

在启动另一个块之前等待直到执行两个异步块

使用GCD时,我们希望等到两个异步块执行完成后再继续执行下一步.最好的方法是什么?

我们尝试了以下方法,但它似乎不起作用:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block1
});


dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block2
});

// wait until both the block1 and block2 are done before start block3
// how to do that?

dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {
    // block3
});
Run Code Online (Sandbox Code Playgroud)

objective-c grand-central-dispatch ios objective-c-blocks

182
推荐指数
5
解决办法
11万
查看次数

ARC支持调度队列吗?

我正在阅读关于"调度队列的内存管理"的苹果文档:

即使您实现了垃圾收集的应用程序,您仍必须保留并释放调度队列和其他调度对象.Grand Central Dispatch不支持回收内存的垃圾收集模型.

我知道ARC不是垃圾收集器,但我想确定我不需要dispatch_retain和dispatch_release我的dispatch_queue_t

objective-c grand-central-dispatch automatic-ref-counting

93
推荐指数
2
解决办法
3万
查看次数

Android AsyncTask示例和解释

我想AsyncTask在我的应用程序中使用一个,但我无法找到一个代码片段,其中简单解释了工作原理.我只想要一些东西来帮助我快速恢复速度,而不必再次浏览文档或大量的问答.

android android-asynctask

39
推荐指数
1
解决办法
4万
查看次数

Grand Central Dispatch vs. NSThread

我为NSThread和Grand Central Dispatch(GCD)创建了一些测试代码:

- (void)doIt:(NSNumber *)i
{
 sleep(1);
 NSLog(@"Thread#%i", [i intValue]);
}

- (IBAction)doWork:(id)sender
{

 for (int i = 0; 10 > i; i++) {
    NSNumber *t = [NSNumber numberWithInt:i];
    [NSThread detachNewThreadSelector:@selector(doIt:) toTarget:self withObject:t];
 }

 sleep(1);

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
 dispatch_apply(10, queue, ^(size_t i) {
    sleep(1);
    NSLog(@"GCD#%u",(int)i);
 });
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

2011-04-13 19:41:07.806 GDC[1494:5e03] Thread#0
2011-04-13 19:41:07.813 GDC[1494:6903] Thread#3
2011-04-13 19:41:07.812 GDC[1494:6403] Thread#2
2011-04-13 19:41:07.812 GDC[1494:5f03] Thread#1
2011-04-13 19:41:07.813 GDC[1494:6e03] Thread#4
2011-04-13 19:41:07.814 GDC[1494:7303] Thread#5
2011-04-13 19:41:07.814 GDC[1494:7803] Thread#6
2011-04-13 …
Run Code Online (Sandbox Code Playgroud)

cocoa-touch nsthread grand-central-dispatch ios

19
推荐指数
2
解决办法
2万
查看次数

Swift3 GCD中的main.async vs main.sync()vs global().async

示例A: - 这会导致App Crash.

DispatchQueue.main.async {           
        let url = URL(string: imageUrl)
        do {
             let data = try Data(contentsOf: url!)
                DispatchQueue.main.sync {
                    self.imageIcon.image = UIImage(data: data)
                }
            }
Run Code Online (Sandbox Code Playgroud)

例B: - 但事实并非如此

DispatchQueue.global().async {  
        let url = URL(string: imageUrl)
        do {
            let data = try Data(contentsOf: url!)
                DispatchQueue.main.sync {
                    self.imageIcon.image = UIImage(data: data)
                }
            }
Run Code Online (Sandbox Code Playgroud)

据我所知,

  • x.sync意味着在主线程/ UI线程中执行操作而x.async意味着在后台线程中执行操作.
  • 全局意味着执行具有并发队列的东西,即并行任务

Quest1: - 那么为什么我的应用程序在后台线程(即main.async)执行任务时崩溃,而不是调用主线程来更新UI.

Quest2: - main.async和global().async有什么区别.

multithreading asynchronous ios swift swift3

7
推荐指数
3
解决办法
5082
查看次数