android 学习笔记 服务的基本用法
来源:互联网 发布:json.js下载 编辑:程序博客网 时间:2024/05/20 19:16
新增一个名为MyService的类,并让它继承自Service
既然是定义一个服务,自然应该在服务中去处理一些事情了,那处理事情的逻辑应该写在哪里呢?这时就可以重写Service中的另外一些方法了,如下所示:
public class MyService extends Service { @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); } }可以看到,这里重写了onCreate()、onStartCommand()和onDestroy()这三个方法, 它们是每个服务中最常用到的三个方法了。其中onCreate()方法会在服务创建的时候调用,onStartCommand()方法会在每次服务启动的时候调用,onDestroy()方法会在服务销毁的时候 调用。
通常情况下,如果我们希望服务一旦启动就立刻去执行某个动作,就可以将逻辑写在onStartCommand()方法里。而当服务销毁时,我们又应该在onDestroy()方法中去回收那些不再使用的资源。
另外需要注意,每一个服务都需要在AndroidManifest.xml文件中进行注册才能生效,于是应该修改AndroidManifest.xml文件,代码如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.servicetest" android:versionCode="1" android:versionName="1.0" > …… <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > …… <service android:name=".MyService" > </service> </application> </manifest>
希望在MyService里提供一个下载功能,然后在活动中可以决定何时开始下载,以及随时查看下载进度。实现这个功能的思路是创建一个专门的Binder对象来对下载功能进行管理,修改MyService中的代码,如下所示:
public class MyService extends Service { private DownloadBinder mBinder = new DownloadBinder(); class DownloadBinder extends Binder { public void startDownload() { Log.d("MyService", "startDownload executed"); } public int getProgress() { Log.d("MyService", "getProgress executed"); return 0; } } @Override public IBinder onBind(Intent intent) { return mBinder; } …… }
可以看到,这里我们新建了一个DownloadBinder类,并让它继承自Binder,然后在它 的内部提供了开始下载以及查看下载进度的方法。当然这只是两个模拟方法,并没有实现真正的功能,我们在这两个方法中分别打印了一行日志。
在activity 中绑定服务 代码如下所示:
public class MainActivity extends Activity implements OnClickListener { private Button startService; private Button stopService; private Button bindService; private Button unbindService; private MyService.DownloadBinder downloadBinder; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { downloadBinder = (MyService.DownloadBinder) service; downloadBinder.startDownload(); downloadBinder.getProgress(); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); …… bindService = (Button) findViewById(R.id.bind_service); unbindService = (Button) findViewById(R.id.unbind_service); bindService.setOnClickListener(this); unbindService.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) {
case R.id.bind_service: Intent bindIntent = new Intent(this, MyService.class); bindService(bindIntent, connection, BIND_AUTO_CREATE); // 绑定服务 break; case R.id.unbind_service: unbindService(connection); // 解绑服务 break; default: break; } } }
可以看到,这里首先创建了一个 ServiceConnection 的匿名类,在里面重写了 onServiceConnected()方法和onServiceDisconnected()方法,这两个方法分别会在活动与服务 成功绑定以及解除绑定的时候调用。在onServiceConnected()方法中,又通过向下转型得到了DownloadBinder的实例,有了这个实例,活动和服务之间的关系就变得非常紧密了。 现在我们可以在活动中根据具体的场景来调用DownloadBinder 中的任何public方法,即实现了指挥服务干什么,服务就去干什么的功能。这里仍然只是做了个简单的测试,在 onServiceConnected()方法中调用了DownloadBinder的startDownload()和getProgress()方法。
当然,现在活动和服务其实还没进行绑定呢,这个功能是在BindService按钮的点击事件里完成的。可以看到,这里我们仍然是构建出了一个Intent对象,然后调用bindService() 方法将MainActivity和MyService进行绑定。bindService()方法接收三个参数,第一个参数就是刚刚构建出的Intent对象,第二个参数是前面创建出的ServiceConnection的实例,第三个参数则是一个标志位,这里传入BIND_AUTO_CREATE表示在活动和服务进行绑定后自动创建服务。这会使得MyService 中的onCreate()方法得到执行,但onStartCommand()方法不会执行。
然后如果我们想解除活动和服务之间的绑定该怎么办呢?调用一下unbindService()方法就可以了,这也是UnbindService按钮的点击事件里实现的功能。
0 0
- android 学习笔记 服务的基本用法
- 【Android】安卓学习笔记之服务的基本用法
- Android学习-服务的基本用法
- 【Android】安卓学习笔记之服务的基本用法(二)
- android 学习笔记 线程的基本用法
- Android学习笔记----ListView的基本用法
- android学习十八(Service服务的基本用法)
- android服务基本用法
- android 学习笔记 位置查询LocationManager的基本用法
- 【Android】安卓学习笔记之通知的基本用法
- RecyclerView的基本用法(第一行代码android学习笔记)
- Android Service 服务的基本用法
- android---(Service服务的基本用法)
- Android学习笔记-Service 基本用法
- Android学习笔记----SQLite数据库基本用法
- Android学习笔记----ContentProvider基本用法
- Android学习笔记----Intent基本用法
- 服务的基本用法
- C# 简单时间操作
- 一个在unity3d中使用Excel做配置的解决方案
- Android 权限大全
- C++与C#网络传输中的编码转换
- USACO-Section 1.5 Number Triangles(DP)
- android 学习笔记 服务的基本用法
- iOS手势
- SpringBoot自定义参数注解
- UIImageView多张图片切换
- Maven pom.xml 配置详解
- HTTP Basic Authorization(附iOS实现方法)
- C# datagridview 赋值方式
- fingerprint recognition 指纹识别工程记录
- HDOJ 1716 排列2(next_permutation函数)