博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 程式开发:(廿二)服务 —— 22.1 自定义服务
阅读量:6543 次
发布时间:2019-06-24

本文共 2547 字,大约阅读时间需要 8 分钟。

服务,就是跑在后台的“程序”,不需要和用户进行交互。举个例子,当使用一款应用的时候,可能同时想在后台播放一些音乐。在这种情况下,后来播放音乐的代码不需要和用户进行交互,所以,它就可能被当成一个服务。当不需要给用户提供UI的时候,服务也是一种非常好的选择。

想要彻底的了解服务的工作原理,最好的办法就是去着手尝试一下。下面将会新建一个简单的服务,并且在其中添加一些方法。讲述如何开启和关闭一个服务。

1. 新建一个工程,Services。

2. 新建一个类,MyService。

 

public class MyService extends Service {    @Override    public IBinder onBind(Intent arg0) {        return null;    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        // We want this service to continue running until it is explicitly        // stopped, so return sticky.        Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();		return START_STICKY;    }		@Override	public void onDestroy() {		super.onDestroy();		Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();	}}

3. 修改AndroidManifest.xml。

 

 

4. 修改main.xml。

 

 

5. 修改ServicesActivity.java。

 

 

public class ServicesActivity extends Activity {    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);    }        public void startService(View view) {        startService(new Intent(getBaseContext(), MyService.class));    }        public void stopService(View view) {        stopService(new Intent(getBaseContext(), MyService.class));    }}

6. 调试

 

 

这个例子展示了最简单的服务。这个服务本身不会做什么有用的东西,只是显示服务创建的过程。

首先,定义一个Serivce基类的子类。所有的服务都继承Service基类。

 

public class MyService extends Service {}

然后,实现3个方法。

 

 

@Override    public IBinder onBind(Intent arg0) { ... }    @Override    public int onStartCommand(Intent intent, int flags, int startId) { ... }		@Override	public void onDestroy() { ... }

onBind()方法可以把一个activity绑定到一个service上面。这就是说,这个方法可以让一个activity去直接访问一个service里面的成员变量和方法。目前,仅仅返回一个null,后续再讨论这个方法。

 

 

onStartCommand()方法,在调用startService()的时候被调用。这个方法意味着service的开始,这里可以写一些自己的代码逻辑。这里,我返回了一个常量START_STICKY,这样的话,如果这个service不stop的话就会一直跑下去。

 

onDestroy()方法,在调用stopService()的时候被调用。这里可以清理service用到过的资源。

除了代码中的例子,也可以用另外一种方法去开启服务。

在AndroidManifest.xml中声明Action。

 

 

 

 

startService(new Intent("net.manoel.MyService"));

想要停止一个服务,调用stopService():

 

 

stopService(new Intent(getBaseContext(), MyService.class));

 

 

 

你可能感兴趣的文章
78. Subsets
查看>>
27.Docker集群部署
查看>>
DNS保存
查看>>
IOS 多线程02-pthread 、 NSThread 、GCD 、NSOperationQueue、NSRunLoop
查看>>
第一周冲刺第五天博客
查看>>
[LeetCode]Longest Increasing Path in a Matrix
查看>>
C++基础之适配器
查看>>
集合set-深入学习
查看>>
C#语言学习——面向对象的几大原则
查看>>
zk 常用资料整理(转)
查看>>
获取历史K线数据的几个方法
查看>>
第一篇、HTML标签
查看>>
24访问者模式Visitor
查看>>
JavaScript 字符串操作
查看>>
Android中asset文件夹和raw文件夹区别
查看>>
Fuel 30 分钟快速安装openstack 分类: 软件插件学习 ...
查看>>
Python学习笔记-练习编写ATM+购物车(购物商城)
查看>>
第二章家庭作业 2.78
查看>>
【转】SQL Server查询数据库所有存储过程、触发器、索引信息SQL分享
查看>>
ZT电路板设计软件及公司知识普及
查看>>