第一行代码-9.3 服务的基本用法
2016-02-25 22:45
459 查看
1、定义一个服务
首先创建,然后注册
2、启动或停止服务
开启服务之后,可以找到正在运行的MyService服务:
2、服务和活动通信
上一节我们学习了怎样开启和结束一个服务,但是服务开启之后做什么事情还控制不了,也就是说onStartCommand执行什么还不能控制。
举个例子,现在我要下载一个音乐,于是我开启了下载音乐的服务,执行了onStartCommand()函数,但是接下来我还要暂停下载,或者是停止下载,如果只用上面的代码是做不到的。这里必须借助刚才没有实现的onBind函数。
修改MyService中的代码,如下:
写好了onBind函数,然后看看怎么在MainActivity中绑定服务:
BIND_AUTO_CREATE的意思是,如果执行bindService的时候服务还没有创建,那么会自动创建活动。
执行效果:
注意:如果已经解绑服务了,再次执行unbindService会崩溃,暂时不知道原因。
首先创建,然后注册
// ServiceTest - Service.java public class MyService extends Service{ @Override public IBinder onBind(Intent arg0) { return null; } // 服务创建的时候使用 @Override public void onDestroy() { super.onDestroy(); } // 服务启动的时候调用 @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } // 服务销毁的时候调用 @Override public void onCreate() { super.onCreate(); } }
<!-- AndroidManifest.xml --> <service android:name="com.example.servicetest.MyService"></service>
2、启动或停止服务
<!-- activity_main.xml --> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/start_service_button" android:text="启动服务"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/stop_service_button" android:text="结束服务"/> </LinearLayout>
@Override public void onClick(View view) { switch (view.getId()) { case R.id.start_service_button: Intent startIntent = new Intent(MainActivity.this, MyService.class); startService(startIntent); break; case R.id.stop_service_button: Intent stopIntent = new Intent(MainActivity.this, MyService.class); stopService(stopIntent); break; default: break; } }
开启服务之后,可以找到正在运行的MyService服务:
2、服务和活动通信
上一节我们学习了怎样开启和结束一个服务,但是服务开启之后做什么事情还控制不了,也就是说onStartCommand执行什么还不能控制。
举个例子,现在我要下载一个音乐,于是我开启了下载音乐的服务,执行了onStartCommand()函数,但是接下来我还要暂停下载,或者是停止下载,如果只用上面的代码是做不到的。这里必须借助刚才没有实现的onBind函数。
修改MyService中的代码,如下:
// MyService.java - 添加的代码 class DownloadBinder extends Binder { public void startDownload() { Log.d("MyService", "开始下载!"); } public int getProgress() { Log.d("MyService", "获取进度!"); return 0; } } private DownloadBinder mBinder = new DownloadBinder(); @Override public IBinder onBind(Intent arg0) { return mBinder; }
写好了onBind函数,然后看看怎么在MainActivity中绑定服务:
<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="绑定服务" android:id="@+id/bind_service_button"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="解绑服务" android:id="@+id/unbind_service_button"/>
// MainActivity.java - 增加的部分 private Button mBBindService; private Button mBUnbindService; private MyService.DownloadBinder downloadBinder; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName arg0) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { downloadBinder = (MyService.DownloadBinder) service; downloadBinder.startDownload(); downloadBinder.getProgress(); } }; @Override public void onClick(View view) { switch (view.getId()) { case R.id.start_service_button: Intent startIntent = new Intent(MainActivity.this, MyService.class); startService(startIntent); break; case R.id.stop_service_button: Intent stopIntent = new Intent(MainActivity.this, MyService.class); stopService(stopIntent); break; case R.id.bind_service_button: Intent bindIntent = new Intent(MainActivity.this, MyService.class); bindService(bindIntent, connection, BIND_AUTO_CREATE); // 绑定服务 break; case R.id.unbind_service_button: unbindService(connection); // 解绑服务 break; default: break; } }
BIND_AUTO_CREATE的意思是,如果执行bindService的时候服务还没有创建,那么会自动创建活动。
执行效果:
注意:如果已经解绑服务了,再次执行unbindService会崩溃,暂时不知道原因。
相关文章推荐
- python小程序之一
- 喊啥--主页面代码
- 【PHP】织梦仿站学习笔记(一)
- UVA 225(p214)----Golygons
- 从C++转向java——4、循环
- 2.25 Java基础总结 ①多态②向上向下转型③instanceof
- java中获取类加载路径和项目根路径的5种方式分析
- php中的==和===
- Cpp_引用
- 理解PHP中会话控制
- 【JAVA】antlr.collections.AST.getLine()I异常
- Java String详解
- Struts2 自定义下拉框标签Tag
- Struts2 自定义下拉框标签Tag
- Struts2 自定义下拉框标签Tag
- Sam版Matlab粒子群PSO工具已经更新
- [Leetcode]214. Shortest Palindrome@python
- windows下安装zend框架
- 2015年第六届蓝桥杯本科B组C++省赛个人题解
- 《笨办法学Python》 第45课手记