美文网首页
Notification不能跨进程通信

Notification不能跨进程通信

作者: 码蚁居然被用过了 | 来源:发表于2016-03-27 20:42 被阅读87次

情景再现:在项目中遇到从数据库加载大量数据的情况,为了避免卡顿的现象,所以另开一个线程进行数据库读写操作,然后用广播通知主线程刷新。但是实际运行起来,界面并没有更新。

难道数据没读出来,单步调试一下,排除了这种可能。再想想其他原因,主界面不刷新,大部分情况下都是因为代码没有在主线程进行,打上断点结果如下,发现果然不在主线程:

Paste_Image.png

顺藤摸瓜,发现Notification并没有在主线程内发出,利用GCD在主线程里发送广播,问题解决。

原因:这里借助苹果官方文档里的描述
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Notifications/Articles/NotificationQueues.html#//apple_ref/doc/uid/20000217-SW1
In a multithreaded application, notifications are always delivered in the thread in which the notification was posted, which may not be the same thread in which an observer registered itself.大概意思是在哪个线程内发广播,那么接受广播后的代码就在这个线程执行。

优化:那么如果代码中存在很多这种发送广播刷新UI的时候,岂不是每次发的时候都要判断一下是不是在主线程,比较麻烦。所以给刷新UI的代码加上GCD主线程执行,也能达到同样的效果。

延伸:Notification是iOS中常用的通信方式,那么其他方式如KVO、delegate一样也会存在这种问题,所以在异步加载数据刷新界面的时候都需要在主线程进行。

相关文章

  • Notification不能跨进程通信

    情景再现:在项目中遇到从数据库加载大量数据的情况,为了避免卡顿的现象,所以另开一个线程进行数据库读写操作,然后用广...

  • Android通信v2.0

    跨网络通信 Socket本地通信,进程从zygote进程fork的指令都是用socket本地通信的 跨应用/进程通...

  • windows 匿名管道

    1、匿名管道是进程间通信的一种技术。windows提供的匿名管道技术,不能够跨网络跨机器,只能在同一机器上不同进程...

  • linux进程间通信(1)

    一、进程通信概述 1、什么是进程间通信?什么是线程间通信? 进程间通信: 进程间通信就指的是用户空间中进程A与进程...

  • IPC机制

    一、IPC简介 (1)IPC是Inter-Process Communication的缩写,含义为进程间通信或者跨...

  • 调起其他APP的Activity或Service组件的注意点

    最近在参考《Android开发艺术探索》学习跨进程通信,在写一个使用Messenger跨APP通信的小实例时,在调...

  • 操作系统拾遗--进程同步、互斥

    进程通信 进程通信--进程之间的信息交换,如同步、互斥。 进程通信分为: 低级通信方式:同步与互斥 高级通信方式:...

  • Android进程间通信(IPC机制)

    一.IPC简介 1.IPC:是Inter-Process Communication的缩写,含义为进程间通信或者跨...

  • 8-electron 主进程与渲染进程之间的通信(同步通信、异步

    electron 主进程与渲染进程之间的通信(同步通信、异步通信) electron 主进程和渲染进程通信 ele...

  • 第二章 进程的描述与控制5

    2.6 进程通信 1、进程通信是指进程之间的信息交换。 2、进程通信分为: 1)低级通信——进程之间的互斥和同步 ...

网友评论

      本文标题:Notification不能跨进程通信

      本文链接:https://www.haomeiwen.com/subject/jehjlttx.html