一、Android中进程和线程的区别
**Android 中线程和进程是两个不同的概念,但都与并发编程密切相关。
1)线程是一个进程内的执行路径,能够与同一进程中的其他线程共享同一块内存空间,线程比进程更轻量级,可以更快地创建和切换,但它们也更容易导致数据竞争和其它同步问题。
2)进程是一个独立的运行环境,拥有自己的内存空间和系统资源,不同进程之间不能直接共享内存空间,需要通过 IPC(lnter-Process Communication)机制进行通信。进程之间的隔离使其更加稳定和安全,但创建和切换进程的代要高于线程。
扩展知识:
1)主线程和工作线程:
主线程(UI线程):负责处理UI的更新和用户交互,即使在处理较长时间的操作中,它也需要保持响应性,耗时操作应避免在主线程执行,否则会造成应用卡顿其至无响应(ANR,Application Not Responding)
工作线程:通常用于处理耗时操作,比如网络清求或数据库操作,以免阳塞主线程,使用线程池(如 Executors)可以更高效地管理多个工作线程。
2)AsyncTask:
早期的Android中引入的一个简便的工具类,用于在主线程外执行后台任务,并在完成后将结果返回到主线程。尽管易于使用,但已被弃用,建议使用现代的工具类如Executorservice 或HandlerThread或RxJava.
3)Handler 和 Looper:
Handler和Loper是Android中用于处理消息和Runnable对象的机制。Looper 负责循环地处理消息队列中的消息,而Hander 则负责发送和处理这些消息。典型用法是在子线程中创建一个 Looper ,然后使用 Handler 在该子线程中处理任务。
4)Service 和IntentService:
service是一种可以在后台长期运行的组件,适用于一些后台计算或网络请求等需求。
Intentservice是 service 的一种简化版本,通过工作线程来外理 Intent,相对更加省心,可以自动在任务完成后停止服务。**
二、什么是Android中的四大组件?
Android 的四大组件分别是:Activity、Service、Broadcast Receiver 和 Content Provider.
1)Activity:这是你与用户进行交互的入口。每一个 Activity 都是一个单独的界面,负责显示 UI和响应用户操作。
2)Service:Service 是运行在后台且不直接与用户交互的组件。适用于需要在后台执行长时间运行操作的任务,类似播放音乐或下载文件等。
3)Broadcast Receiver:用于接收并响应广播消息,广播消息可以是来自系统的,也可以是来自应用的。典型用例包括处理系统发出的电池电量低通知或应
用内部的事件通知。
4)Content Provider:用来在不同应用间共享数据。它提供了一套标准的方法来对数据进行访问和操作,例如通过 ContentResolver 查询或修改数据。
扩展知识
它们的应用场景和工作原理
1)Activity:
Activity 是 Android 应用存在的基础,每一个应用至少包含一个 Activity。通常,我们会把 Activity 类比为"屏幕"或"页面"。通过 Intents,你可以启动
其他 Activity 甚至传递数据。Activity 有自己的生命周期,你需要管理它们的状态,譬如 onCreate0、onstart0、onResume() 等方法,它们帮助你正确启动、恢复、暂停和销毁Activity。
2)Service:
Service 分为两种类型:前台服务(foreground Service)和后台服务(Background Service)。前台服务执行一项用户感知的操作并显示一个通知,后台服务用于执行一些无用户感知的操作。你可以通过 startService( )方法启动服务,也可以借助 bindService( 方法绑定服务以便进行进程间诵信。
3)Broadcast Receiver:
Broadcast 系统广泛接用于系统各个方面,例如电池电量变化、屏幕开关状态、更换网络等,自定义广播可以被应用内部其他组件监听。这是通过注册
BroadcastReceiver 完成的,无论是静态注册还是动态注册。接收广播消息后,你可以在 onReceive( ) 方法中实现处理逻辑。
4)Content Provider:
Content Provider 是标准化的接口,便于储存和检索应用间共享的数据。它采用了类似于数据库的方式来访问数据:URI(统一资源标识符)。例如,你可以
通过 Contacts provider获得设备上的联系人信息。在实现, Content Provider时会涉及到以下几个方法:query( )、inser( )、update( )和 delet(),这些方法帮助你管理数据,保证数据的一致性和互操作性。
除了这些,四大组件间还可以通过Intent 协同工作。Intent 是用于在应用间发起执行操作的消息,它可以是显式的(指定具体组件),也可以是隐式的(指
定要完成的动作)。例如,可以用Intent 启动 Activity、Service,或者发送广播消息。