android Service 的使用
1 Service 简介
Service 是Android 四大组件之一 一般在后台运行,无用户界面,用户无法看到。
Service主要用于组件之间交互(例如:与Activity、ContentProvider、BroadcastReceiver进行交互)、后台执行耗时操作等(例如下载文件,播放音乐等,但Service在主线程运行时长不能超过20s,否则会出现ANR,耗时操作一般建议在子线程中进行操作)。
2 Service 模式
Service启动模式主要分两种: 1. 启动模式。 2. 绑定模式。
启动模式的生命周期为 StartService--> onCreate---> onStartCommand-->onDestory
绑定模式的生命周期为 BindService--->onCreate--->onBind--->onUnBind---->onDestory
3 代码介绍Service的使用
先看下启动服务
3.1 创建的服务要继承Service
3.2 必须在Androidmainfest.xml 中注册
下面看看代码-----写一个简单的开启与关闭服务
//启动服务findViewById(R.id.start).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, MyService.class);startService(intent);}});//关闭服务findViewById(R.id.close).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, MyService.class);stopService(intent);}});
然后我们在看看创建的MyService 代码
public class MyService extends Service {@Nullable@Overridepublic IBinder onBind(Intent intent) {return null;}@Overridepublic void onCreate() {super.onCreate();Log.e("----------服务创建","111111111111");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.e("----------服务调用","111111111111");return super.onStartCommand(intent, flags, startId);}@Overridepublic void onDestroy() {super.onDestroy();Log.e("----------服务销毁","111111111111");}
}
代码里面有一个onBind 这个无论是启动服务还是绑定服务都会存在的,在启动服务里面不用关返回null就行
在绑定服务里面可以返回要绑定的内容
最后别忘记在配置文件中注册了
<service android:name=".MyService" />
配置文件的属性如下
<service android:name=".Myservice"
android:enabled="true"
android:exported="true"
android:icon="@drawable/background_blue"
android:label="string"
android:process="string"
android:permission="string">
</service>
android:exported 表示是否允许除了当前程序之外的其他程序访问这个服务
android:enabled 表示是否启用这个服务
android:permission 是权限声明
android:process 是否需要在单独的进程中运行,当设置为android:process=”:remote”时,代表Service在单独的进程中运行。注意“:”很重要,它的意思是指要在当前进程名称前面附加上当前的包名,所以“remote”和”:remote”不是同一个意思,前者的进程名称为:remote,而后者的进程名称为:App-packageName:remote。
android:isolatedProcess 设置 true 意味着,服务会在一个特殊的进程下运行,这个进程与系统其他进程分开且没有自己的权限。与其通信的唯一途径是通过服务的API(bind and start)。
绑定服务
//绑定服务findViewById(R.id.bind).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent(MainActivity.this, BindService.class);bindService(intent, conn, Service.BIND_AUTO_CREATE);}});//解绑服务findViewById(R.id.unbind).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {unbindService(conn);}});
bindService 里面有三个参数 第三个是一个标记,个人理解为绑定看下其代码
public class MainActivity extends AppCompatActivity {private ServiceConnection conn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);conn = new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {BindService.MyBinder binder = (BindService.MyBinder) service;binder.start();binder.end();}@Overridepublic void onServiceDisconnected(ComponentName name) {}};
}
}
绑定的服务
public class BindService extends Service {//初始化自定义的Binder对象private MyBinder mBinder = new MyBinder();public class MyBinder extends Binder {public void start() {Log.e("----------start", "start:");}public void end() {Log.e("-----------end", "end:");}}@Overridepublic void onCreate() {super.onCreate();Log.e("------------hxm", "onCreate");}@Nullable@Overridepublic IBinder onBind(Intent intent) {Log.e("------------hxm", "IBinder");return mBinder;}@Overridepublic boolean onUnbind(Intent intent) {Log.e("------------hxm", "onUnbind");return super.onUnbind(intent);}@Overridepublic void onDestroy() {super.onDestroy();Log.e("------------hxm", "onDestroy");}
}
个人写一个demo 点击查看吧
参考文章
https://mp.weixin.qq.com/s?__biz=MzU4MTIzMjM3MA==&mid=2247484827&idx=2&sn=80212d30ef757afccd0e601ce73f14a1&scene=21#wechat_redirect
https://blog.csdn.net/weixin_39460667/article/details/82770164
总结
以上是生活随笔为你收集整理的android Service 的使用的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Java设计模式:单例模式
- 下一篇: Android 动态广播与静态广播