【移动端】安卓、IOS线程分类

打印 上一主题 下一主题

主题 753|帖子 753|积分 2259

安卓

Android中的多线程主要分为两类:主线程与子线程


  • APP一启动,本身就是一个线程,这个线程被称为主线程mainThread,负责显示界面,跟用户交互。 界面通常被称为UI(User
    Interface),主线程也被称为UI线程。
  • 别的为子线程
两个原则(同样适用于ios):


  • 主线程不能实行网络请求/文件读写等耗时操纵
  • 子线程不能实行UI刷新
步伐例子,写一个耗时操纵,假设从网络获取了字符串
  1. private String getStringFormNet(){
  2.         //假设从网络获取了字符串
  3.         String result = ''
  4.         StringBulider stringBulider = new StringBulider();
  5.         //模拟一个耗时操作
  6.         for(int i=0,i<100,i++){
  7.                 stringBulider.append("字符串"+i)
  8.         }
  9.         try{
  10.                 //此处休眠5s
  11.                 Thread.sleep(5000):
  12.                 }
  13.         catch(InterruptedException e){
  14.                 e.printStackTrace();
  15.                 }
  16.         result = stringBulider.toString();
  17.         return result;
  18. }
复制代码
假设主线程来运行上面耗时操纵
  1. public class MainActivity extends AppCompatActivity{
  2.         private TextView tvContent;
  3.         @Override
  4.         protected void onCreate(Bundle savedInstanceState) {
  5.         super.onCreate(savedInstanceState);
  6.         setContentView(R.layout.activity_main);
  7.         tvContent = findViewById(R.id.tv_content);
  8.     }
  9.     public void start(View view){
  10.             //做一个耗时任务
  11.             Thread thread = new Thread(new Runnable(){
  12.                     @Override
  13.                     public void run(){
  14.                             String stringFormNet = getStringFormNet();
  15.                             tvContent.setText(stringFormNet();
  16.                             }
  17.                     });
  18.                     thread.start();
  19.                     Toast.makeText(this,"任务完成!",Toast.LENGTH_SHORT).show();
  20.                     }
  21.                    
  22.     private String getStringFormNet(){
  23.                 //假设从网络获取了字符串
  24.                 String result = ''
  25.                 StringBulider stringBulider = new StringBulider();
  26.                 //模拟一个耗时操作
  27.                 for(int i=0,i<100,i++){
  28.                         stringBulider.append("字符串"+i)
  29.                 }
  30.                 try{
  31.                         //此处休眠5s
  32.                         Thread.sleep(5000):
  33.                         }
  34.                 catch(InterruptedException e){
  35.                         e.printStackTrace();
  36.                         }
  37.                 result = stringBulider.toString();
  38.                 return result;
  39.         }
  40. }
复制代码
运行结果,直接显示"任务完成!"然后退出历程,说明主历程无法直接运行耗时操纵!
IOS


在iOS和macOS开发中,处置惩罚并发和多线程是常见的需求,以提高应用步伐的性能和响应性。Pthreads、NSThread、GCD(Grand Central Dispatch)、NSOperation 和 NSOperationQueue 是几种常用的技能和框架,它们各有特点和适用场景。
1. Pthreads

Pthreads 是POSIX线程(Portable Operating System Interface for uniX threads)的缩写,是C语言标准的一部分,用于提供线程、互斥锁、条件变量等线程同步功能。固然它功能强盛,但因为是C语言级别的API,所以在Objective-C或Swift中利用时大概会感觉比力底层和繁琐,且需要手动管理线程的生命周期和同步问题。
2. NSThread

NSThread 是Cocoa框架提供的一个轻量级的线程类,它封装了POSIX线程(Pthreads)的功能,并提供了面向对象的接口。利用NSThread可以更方便地创建、启动、暂停、规复和停止线程。然而,和直接利用Pthreads一样,NSThread也需要开发者手动管理线程的生命周期和同步问题,这大概会导致代码变得复杂且难以维护。
3. GCD

GCD(Grand Central Dispatch)是Apple推出的一种高效的并发编程工具,它答应开发者将任务分配到多个核心上并行实行,而无需创建和管理线程。GCD会主动管理线程的生命周期和同步问题,大大简化了并发编程的复杂度。GCD利用队列(Queues)和任务(Blocks或Functions)来管理并发任务,开发者可以通过将任务添加到差别的队列(串行队列、并发队列、主队列等)来控制任务的实行顺序和优先级。
4. NSOperation & NSOperationQueue

NSOperation 和 NSOperationQueue 是基于GCD的更高级别的并发编程框架,它们提供了面向对象的并发编程接口。NSOperation 是一个抽象类,代表了一个将要实行的任务。开发者可以通过继续NSOperation类并重写其main方法来定义任务的具体实行内容。NSOperationQueue则负责管理NSOperation对象的队列,包罗任务的添加、取消、实行顺序和优先级等。与GCD相比,NSOperation和NSOperationQueue提供了更丰富的功能,如任务依靠、取消操纵等,使得并发编程更加灵活和强盛。
泉源

Android 线程有哪些 简述android线程
iOS线程知识整理

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

水军大提督

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表