Service要点全解析
Posted 山代王
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Service要点全解析相关的知识,希望对你有一定的参考价值。
1、Service概述
Service的主要作用是,让系统可以在后台干一些不与用户交互的操作,这些操作可能会比较耗时,比如去下载一些网络资源等;也可能是一项长期运行的工作,比如说监听电话来电、播放音乐等。初听起来,Service与线程Thread很像,但Service和Thread完全是两个不同的东西啊。
(1)Service不是运行在一个独立的进程中,它和我们的应用程序在同一个进程中;
(2)Service也不是一个线程,相反,Service是运行在主线程的,因此我们不能直接在Service中干上面那些耗时操作,因为它会很耗CPU,阻塞主线程,很容易出现ANR错误(Application Not Responding),合适的做法是,在Service中开启一个Thread,进行上面的耗时操作。
如果我们要在Service中开启线程进行工作,我们也可以使用Service的一个子类IntentService,IntentService类中已经开启了线程,我们只需要实现一个方法即可,后面具体介绍。
2、Service用法
和Activity类似,我们要使用Service,只需要通过Intent发出请求即可。当然,在使用Service前,记得在androidManifest.xml中进行声明。启动方式有两种:
我们先在Activity中加入两组四个按钮,一组为startService的启动按钮和相应的停止按钮;一组为bindService的启动按钮和相应的停止按钮。如图:
启动方式一:startService()
在Activity中,我们如下使用:
public class MainActivity extends Activity implements OnClickListener{
private Button startServiceBtn,stopServiceBtn,bindServiceBtn,unBindServiceBtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startServiceBtn = (Button) findViewById(R.id.startService);
stopServiceBtn = (Button) findViewById(R.id.stopService);
bindServiceBtn = (Button) findViewById(R.id.bindService);
unBindServiceBtn = (Button) findViewById(R.id.unBindService);
startServiceBtn.setOnClickListener(this);
stopServiceBtn.setOnClickListener(this);
bindServiceBtn.setOnClickListener(this);
unBindServiceBtn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.startService://通过startService()的方式启动Service
Intent intent = new Intent(this,ServiceTest.class);
startService(intent);
break;
case R.id.stopService:
stopService(new Intent(this,ServiceTest.class));
break;
case R.id.bindService://通过bindService()的方式启动Service
//TODO
break;
case R.id.unBindService:
//TODO
break;
}
}
}
以上是关于Service要点全解析的主要内容,如果未能解决你的问题,请参考以下文章
Android基础 Service全解析----看不见的Activity
What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段