首先,我们需要明确 Service 是运行在主线程的,不能有耗时操作,这样,在 Service 中处理耗时操作的时候,我们依然需要使用线程来处理。
既然在 Service 里也要创建一个子线程,那为什么不直接在 Activity 里创建呢
这是因为 Activity 很难对 Thread 进行控制,当 Activity 被销毁之后,就没有任何其它的办法可以再重新获取到之前创建的子线程的实例。而且在一个 Activity 中创建的子线程,另一个 Activity 无法对其进行操作。但是 Service 就不同了,所有的 Activity 都可以与 Service 进行关联,然后可以很方便地操作其中的方法,即使 Activity 被销毁了,之后只要重新与 Service 建立关联,就又能够获取到原有的 Service 中 Binder 的实例。因此,使用 Service 来处理后台任务,Activity 就可以放心地 finish,完全不需要担心无法对后台任务进行控制的情况。
标准 Service 的写法:
- @Overridepublic int onStartCommand(Intent intent, int flags, int startId) {
- new Thread(new Runnable() {@Overridepublic void run() { // 开始执行后台任务}}).start();return super.onStartCommand(intent, flags, startId);}class MyBinder extends Binder {public void startDownload() {new Thread(new Runnable() {@Overridepublic void run() {// 执行具体的下载任务}}).start();}}
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/04-21/20664008.html