安卓学习笔记之service(一)
来源:互联网 发布:淘宝联盟佣金 编辑:程序博客网 时间:2024/06/03 19:11
安卓四大组件之Service
今天来入门一下service这个组件,这玩意是在你后台做一些必要的工作。
**
1.什么是service?
**
从google官网看的,官方的描述是这样的。
A Service is an application component representing either an application’s desire to perform a longer-running operation while not interacting with the user or to supply functionality for other applications to use. Each service class must have a corresponding declaration in its package’s AndroidManifest.xml. Services can be started with Context.startService() and Context.bindService().
懂英语的话就一目了然了,英语水平差点的话就可以有道了。
翻译过来就是说:
服务是应用程序组件,它表示应用程序希望执行长时间运行的操作,而不与用户交互,或为其他应用程序提供功能。每个服务类在其包的androidmanifest.xml中都必须有相应的“声明”。可以使用Context.startService()和context.bindservice()启动服务。
Service是一种在后台长期运行的。没有界面的组件,由其它组件调用进行。
服务不太会被kill,即使在内存不足的时候被kill,当内存恢复足够的时候,服务又会自己的复活。比如:下载的时候就可以放入服务中来做,启动服务,完成时,关闭服务。
2.如何创建与使用service
我们要在manifest文件里进行声明,当然我们使用as的时候我们也可以通过菜单进行快速的创建service省去手动在manifest文件添加的麻烦。会有两种方法。
第一种
第一步:创建一个service类,并且分别重写它的父类方法,并在manifest文件里面生命注册
<service android:name=".MyService"/>
public class MyService extends Service { @Override public void onCreate() { Log.v("dd","onCreate"); super.onCreate(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.v("dd","onStartCommand"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { Log.v("dd","onDestroy"); super.onDestroy(); }}
仅仅是添加了log日志打印输出。看看生命周期的顺序。然后在activity_main中添加两个连个按钮控件
<Button android:id="@+id/btn_start" android:text="Start Service" android:textAllCaps="false" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/btn_stop" android:text="Stop Service" android:textAllCaps="false" android:layout_width="wrap_content" android:layout_height="wrap_content" />
然后在activity类里面测试:
public class MyActivity extends Activity implements View.OnClickListener { private Button btn_start; private Button btn_stop; private Intent intent; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); initView(); intent = new Intent(this,MyService.class); } private void initView() { btn_start= (Button) findViewById(R.id.btn_start); btn_stop= (Button) findViewById(R.id.btn_stop); btn_start.setOnClickListener(this); btn_stop.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btn_start: startService(intent); break; case R.id.btn_stop: stopService(intent); break; } }}
当点击start按钮的时候,会看到控制台输入以下的文字:
06-21 06:51:15.995 3006-3006/com.does.service V/dd: onCreate
06-21 06:51:16.001 3006-3006/com.does.service V/dd: onStartCommand
当点击stop按钮的时候会调用:
06-21 06:51:22.829 3006-3006/com.does.service V/dd: onDestroy
第二种
使用bindService的方法
布局文件
<Button android:id="@+id/btn_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="StartService" android:textAllCaps="false" /> <Button android:id="@+id/btn_stop" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="StopService" android:textAllCaps="false" /> <Button android:id="@+id/btn_bind" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="BindService" android:textAllCaps="false" /> <Button android:id="@+id/btn_unbind" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="UnBindService" android:textAllCaps="false" />
MainActivity .java文件
public class MainActivity extends Activity implements View.OnClickListener { private Button btn_bind,btn_unbind; private ServiceConnection connection; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initEvent(); } private void initEvent() { connection=new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { //服务连接成功的时候操作 } @Override public void onServiceDisconnected(ComponentName componentName) { //服务取消连接的时候 } }; } private void initView() { btn_bind= (Button) findViewById(R.id.btn_bind); btn_unbind= (Button) findViewById(R.id.btn_unbind); btn_bind.setOnClickListener(this); btn_unbind.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.btn_start: Intent start=new Intent(this,MyService.class); startService(start); break; case R.id.btn_stop: Intent stop=new Intent(this,MyService.class); stopService(stop); break; case R.id.btn_bind: Log.v("does","bind is clicked"); Intent bind=new Intent(this,MyService.class); bindService(bind,connection,BIND_AUTO_CREATE); break; case R.id.btn_unbind: Log.v("does","unbind is clicked"); Intent unbind=new Intent(this,MyService.class); unbindService(connection); break; default: break; } }}
MyService.java
public class MyService extends Service { @Override public void onCreate() { Log.v("does","onCreate"); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.v("does","onStartCommand"); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { Log.v("does","onDestroy"); super.onDestroy(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; }}
当我们点击bind按钮的时候,发现
07-10 20:01:39.836 24361-24361/com.example.does.myapplication V/does: bind is clicked
07-10 20:01:39.836 24361-24361/com.example.does.myapplication V/does: onCreate
当我们点击unbind的时候,发现
07-10 20:04:09.774 24361-24361/com.example.does.myapplication V/does: unbind is clicked
07-10 20:04:09.774 24361-24361/com.example.does.myapplication V/does: onDestroy
3.service的生命周期
在上面我们看到了和activity类似差不多的方法。组件都会有生命周期。所以我们介绍一下service的生命周期。
想必,这样就很形象了吧?
第一种,
onCreate()->onStartCommand()->onDestroy()
第二种就是绑定service
onCreate()->onBind()->unBind()->onDestroy()
两种启动service和停止service的区别就是,第一种启动服务时候,当应用程序退出的时候,后台的service依旧运行,只有运行stopService的时候才停止运行service。那么bindService,整个service进程是随着整个应用程序的生命周期存活,当app的使用内存被系统回收了,那么这个service就会跟着被回收。
- 安卓学习笔记之service(一)
- 安卓学习笔记之service和activity
- 安卓学习笔记之Activity(一)
- 安卓之Service详解(一)
- 安卓学习笔记(九)、service的使用
- xamarin学习笔记A18(安卓Service)
- window service 学习之路(一)【学习笔记】
- 安卓学习笔记(一)
- 安卓学习笔记整理(一)
- 安卓开发学习笔记(一)
- 安卓学习笔记(一)
- 安卓学习笔记一
- 安卓学习笔记一
- 安卓之service学习总结
- 安卓四大组件学习之Service
- 安卓学习笔记<一>:数据存储之SharedPreferences
- Android四大组件之Service服务学习笔记(一)
- 安卓学习之路(一)
- 跨域的几种解决方法
- C程序设计进阶week7
- Java实现-N皇后问题1
- 网络--学习笔记--IP地址分类、子网掩码
- 147. Insertion Sort List
- 安卓学习笔记之service(一)
- 由RGB到HSV颜色空间的理解
- Angular中的指令与过滤器
- 配置图(Configuration Diagram)
- Java实现-N皇后问题2
- 计算机网络刷题(一)
- CSDN迁移Hexo脚本分享
- java对数据简单加密实现案例
- NAT技术与代理服务器