水军大提督 发表于 2024-9-15 07:28:13

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

安卓

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


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


[*]主线程不能实行网络请求/文件读写等耗时操纵
[*]子线程不能实行UI刷新
步伐例子,写一个耗时操纵,假设从网络获取了字符串
private String getStringFormNet(){
        //假设从网络获取了字符串
        String result = ''
        StringBulider stringBulider = new StringBulider();
        //模拟一个耗时操作
        for(int i=0,i<100,i++){
                stringBulider.append("字符串"+i)
        }
        try{
                //此处休眠5s
                Thread.sleep(5000):
                }
        catch(InterruptedException e){
                e.printStackTrace();
                }
        result = stringBulider.toString();
        return result;
}
假设主线程来运行上面耗时操纵
public class MainActivity extends AppCompatActivity{
        private TextView tvContent;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      tvContent = findViewById(R.id.tv_content);
    }
    public void start(View view){
            //做一个耗时任务
            Thread thread = new Thread(new Runnable(){
                    @Override
                    public void run(){
                            String stringFormNet = getStringFormNet();
                            tvContent.setText(stringFormNet();
                            }
                    });
                    thread.start();
                    Toast.makeText(this,"任务完成!",Toast.LENGTH_SHORT).show();
                    }
                   
    private String getStringFormNet(){
                //假设从网络获取了字符串
                String result = ''
                StringBulider stringBulider = new StringBulider();
                //模拟一个耗时操作
                for(int i=0,i<100,i++){
                        stringBulider.append("字符串"+i)
                }
                try{
                        //此处休眠5s
                        Thread.sleep(5000):
                        }
                catch(InterruptedException e){
                        e.printStackTrace();
                        }
                result = stringBulider.toString();
                return result;
        }
}
运行结果,直接显示"任务完成!"然后退出历程,说明主历程无法直接运行耗时操纵!
IOS

https://i-blog.csdnimg.cn/direct/cd35fe7f11e64c9aa24e6a709a05c9ec.png
在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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【移动端】安卓、IOS线程分类