Service使用及注意事项
来源:互联网 发布:pb是什么意思网络用语 编辑:程序博客网 时间:2024/04/30 20:15
最近项目中有使用到service,做的时候还是踩了一些坑,相信小伙伴们也一定或多或少踩过,下面就把这些坑记录一下,后续可能会用到,也方便大家。
一、使用篇
Service生命周期想必大家以及非常熟悉了,这边就不详细介绍,有兴趣的朋友可能上官网研究一下。
二、注意事项篇
1、区分startService
和bindService
这边总结起来可以用一句话形容,startService
调起的Service不受宿主生命周期影响,bindService
则受影响。怎么理解呢?譬如一个Activity把一个Service调起,同样在结束调用时解绑Service的条件下,使用StartService
的话,Activity被杀掉时,Service还在运行。使用bindService
调起则Activity被杀掉时Service也跟着一起挂了。
所以,如果调用startService
开启服务,在Activity关闭的时候一定需要手动的调用stopService
或者在Service中调用stopSelf
亦可以关闭Service,bindService
开启服务则在Activity关闭的时候,调用unbindService
即可。
2、Service和Activity通信问题
众所周知,binder是service和Activity通信使用的。不过其实通过binder,Activity能知道Service里的一些状态,那么Service如何及时的通知Activity呢?
1)通过binder注册回调接口
2)通过广播的形式
3)通过反射(类似EventBus)
以上三种,通常会使用1)和2),第三种并不常见。
三、分层处理
最近大家都在搞什么MVP的,其实一个小功能也能体现这种分层,下面我就给大家介绍下:
假如我们需要实现一个上传文件的demo,并且要求是可以后台上传。那么首先就要想到,这个必须使用service了。
然后怎么去实现所谓的MVP呢,我们现在选择将Activity作为我们的View层,将Service作为我们的Presenter层,好,基于接口编程,我们也来:
我们先定义两个接口类,IUploadListener和IBinderListener,分别定义如下:
package com.example.solitude.servicedemo;/** * Created by FanSS on 2016/3/13. */public interface IUploadListener { /** * 开始上传 */ void showStartUpload(); /** * 上传成功 */ void showUploadSuccess(); /** * 上传失败 */ void showUploadFailed(); /** * 取消上传 */ void showUploadCancel();}
package com.example.solitude.servicedemo;public interface IBinderListener { /** * 绑定回调监听 */ void bindUploadListener(IUploadListener listener); /** * 解绑回调监听 */ void unbindUploadListener();}
然后Activity和Service初步代码如下:
package com.example.solitude.servicedemo;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import android.os.Binder;import android.os.Bundle;import android.os.IBinder;import android.support.v7.app.AppCompatActivity;public class UploadActivity extends AppCompatActivity implements IUploadListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public void showStartUpload() { } @Override public void showUploadSuccess() { } @Override public void showUploadFailed() { } @Override public void showUploadCancel() { }}
package com.example.solitude.servicedemo;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;public class UploadService extends Service { private IUploadListener listener; @Override public void onCreate() { super.onCreate(); } @Override public IBinder onBind(Intent intent) { return new MyBinderListener(); } public class MyBinderListener extends Binder implements IBinderListener { @Override public void bindUploadListener(IUploadListener listener) { } @Override public void unbindUploadListener() { } }}
在MVP中,view是完全展示视图效果,Presenter处理逻辑,通过上面的接口,想必大家已经能看出来,UploadActivity不关心逻辑,只负责启动UploadService,UploadService负责上传的所有逻辑,成功或者失败通过回调接口通知到View层做出对应的展现,这样就能做到简单的分层,使得逻辑更加清晰。
以上。
- Service使用及注意事项
- Service总结及使用注意事项
- anroid Remote Service 使用注意事项
- [笔记] Android Service 使用注意事项
- Service启动方式之startService,及注意事项
- MagicAjax使用及注意事项
- MagicAjax使用及注意事项
- MagicAjax使用及注意事项
- SWFUpload 使用及注意事项
- wllvm使用及注意事项
- UIGraphicsBeginImageContextWithOptions使用及注意事项
- HttpClient使用及注意事项
- service中使用Toast.makeText的注意事项
- service生命周期及使用
- service生命周期及使用
- service注意事项
- 锂电池的使用及注意事项
- TreeMap的使用及注意事项
- Unsupported major.minor version 52.0
- 类的对象和类的指针的区别
- python安装scipy与sklearn模块
- Java——InputStreamReader&OutputStreamWriter字符流实现文本文件复制
- 奇异值分解的几何原理
- Service使用及注意事项
- [UnityUI]UGUI新手引导
- 小心别让圆角成了你列表的帧数杀手
- c++第2次实验(循环)
- Hibernate Modules/Artifacts(Hibernate模块/工件)
- Linux内核启动分析
- 第一次上机实验1-2
- matlab中cumsum函数和sum函数详解
- linux 下配置ftp服务器