android services
2015-12-03 10:47
337 查看
服务在其托管进程的主线程中运行,它既不创建自己的线程,也不在单独的进程中运行(除非另行指定)。
这意味着,如果服务将执行任何 CPU 密集型工作或阻止性操作(例如 MP3 播放或联网),则应在服务内创建新线程来完成这项工作。通过使用单独的线程,可以降低发生“应用无响应”(ANR) 错误的风险,而应用的主线程仍可继续专注于运行用户与 Activity 之间的交互。
简单地说,服务是一种即使用户未与应用交互,但它仍可以在后台运行的组件。 因此,您应仅在必要时才创建服务。如需在主线程外部执行工作,不过只是在用户正在与应用交互时才有此需要,则应创建新线程而非服务。 例如,如果您只是想在 Activity 运行的同时播放一些音乐,则可在
这意味着,如果服务将执行任何 CPU 密集型工作或阻止性操作(例如 MP3 播放或联网),则应在服务内创建新线程来完成这项工作。通过使用单独的线程,可以降低发生“应用无响应”(ANR) 错误的风险,而应用的主线程仍可继续专注于运行用户与 Activity 之间的交互。
使用服务还是线程?
简单地说,服务是一种即使用户未与应用交互,但它仍可以在后台运行的组件。 因此,您应仅在必要时才创建服务。如需在主线程外部执行工作,不过只是在用户正在与应用交互时才有此需要,则应创建新线程而非服务。 例如,如果您只是想在 Activity 运行的同时播放一些音乐,则可在 onCreate()中创建线程,在
onStart()中启动线程,然后在
onStop()中停止线程。您还可以考虑使用
AsyncTask或
HandlerThread,而非传统的
Thread类。
相关文章推荐
- Android View系统解析(上)
- Android笔记——什么是json?json如何使用?
- Android自定义View的实现方法,带你一步步深入了解View(四)
- Android视图状态及重绘流程分析,带你一步步深入了解View(三)
- Android销毁线程的方式,Timer(定时器)的销毁
- Fragment与Fragment的通信交互Demo
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- android 出现大R不识别解决办法
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
- android:ToolBar详解
- Android Data Binding
- Android下保存异常信息到SD卡中并上传服务器
- AndroidStudio mac快捷键
- android studio ndk HelloWorld 编译环境搭建
- Android 自定义View (二) 进阶
- Android修改最小SDK版本(minSdkVersion)
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Android 自定义View (一)
- 代理模式Proxy
- Android Service学习之AIDL, Parcelable和远程服务