eri*_*lee 34 service multithreading android
我目前正在使用alarmmanager启动服务以将位置发布到http.问题是当经理启动并运行服务时,ui似乎停了一会儿.我想问服务线程是否与ui线程分开?
小智 50
澄清一下:应用程序的主线程并不总是UI线程.例如:如果活动停止,则调用onStop(),因此UI线程将从该活动中删除并移至相同或不同应用程序中的另一个活动.
但是,这并不意味着此应用程序不再处于活动状态.此外,如果在后台运行(已启动)服务,它可能会持续一段时间,直到它终止或Android OS由于缺乏资源而终止它.
谁在那段时间运行这项服务?谁触发onStop()或onDestroy()?这是应用程序的主要线程.
UI线程是一种Singleton.它一次只能由一个可见活动使用.应用程序的主线程连接/附加到UI线程或另一个获取它.但是,这并不意味着应用程序没有自己的主线程.
此行为来自Android系统的Linux\Unix基础.大多数开发人员不了解的内容:该应用程序是Linux\Unix OS中的"用户".
每当调用应用程序时,它都类似于登录系统的用户.在应用程序的情况下,用户标识是唯一的应用程序标识,而不需要密码.新登录的"用户"(即Android应用程序)获取进程和资源,例如Java虚拟机的实例.该过程专用于此用户,包括文件系统配额,文件描述符和处理程序在内的资源允许它与操作系统通信.
android应用程序的主线程是从Android OS移交给该应用程序的过程创建的根线程.在此应用程序中创建的任何新线程将始终返回到主线程.
应用程序主线程可以访问的系统资源之一是UI线程.因此,应用程序可以请求主线程,但是请求可能被拒绝(或被授予).示例:如果应用程序进程超出了允许的内存分配大小,Android OS可能会决定拒绝访问UI线程,甚至破坏应用程序并终止进程.
可以通过AndroidManifest.xml中的定义为应用程序(Unix进程分支)定义多个进程.但是,请记住,分配给每个进程的资源将是不同的,即每个进程将拥有自己的VM,因此在不同进程中维护的对象将无法通过相同的JVM堆共享信息.
| 归档时间: |
|
| 查看次数: |
18854 次 |
| 最近记录: |