android service的使用(一)

来源:互联网 发布:怎么把数据导入matlab 编辑:程序博客网 时间:2024/04/29 18:04

service是android的一个组件,相当于一个没有界面的activity,每个service都要在mainfest中进行注册,service有两种启动方式:Context.startService()和Context.bindService().


在详述这两种启动方式之前需要强调:
1.service不是一个单独的进程(可以看我的上一篇博客),如果在mainfest中不设置process属性,service会在默认进程里运行,
2.service和其他组件一样,运行在宿主进程的主线程里,service不是新的线程!!!!如果在service有耗时的工作,请另开thread,防止阻塞main thread。
有了上述的两个知识点,就可以进行servie的启动方式的学习了,由于篇幅较长,本文先讲第一种启动方式,第二种启动方式在下一篇博客中讲述。

service的第一种启动方式:
就是前面提到的Context.startService(),我们的activity,service都是一个Context(虚类),我们这里的例子以在activity中其中为例。
1 Service类的声明
和Activity一样,只不过service继承的是Service类,有几个函数可以override,我在这里声明的Servie如下:
public class MyService extends Service{String TAG = "MyService";@Override      public void onCreate() {          super.onCreate();          Log.d(TAG, "onCreate() executed");      }        @Override      public int onStartCommand(Intent intent, int flags, int startId) {          Log.d(TAG, "onStartCommand() executed");          return super.onStartCommand(intent, flags, startId);      }                @Override      public void onDestroy() {          super.onDestroy();          Log.d(TAG, "onDestroy() executed");      }  @Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubreturn null;}}


2 在mainfest.xml中注册
<service            android:name="com.example.servicetest.MyService">            </service>


3 启动
本文将用一个activity对service进行启动,需要声明一个Intent,在activity中有两个按钮,按下start后启动service,activity的代码如下:
public class MainActivity extends Activity {Intent serviceIntent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);serviceIntent = new Intent(this , MyService.class);Button startButton = (Button)findViewById(R.id.startbutton);startButton.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub//启动servicestartService(serviceIntent);}});Button stopButton = (Button)findViewById(R.id.stopbutton);stopButton.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub//停止servicestopService(serviceIntent);}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

布局文件如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <Button        android:id="@+id/startbutton"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="startService"/>        <Button        android:id="@+id/stopbutton"        android:layout_below="@id/startbutton"        android:layout_marginTop="10dp"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="stopService"/></RelativeLayout>

4 启动流程
在activity中,点击startbutton后输出如下:

点击stopbutton后输出如下:

这其实就是对service的一个完美诠释:

在activity里调用startService()之后在service里onCreate()->onStartCommand()

而在activity里调用stopService()之后在service里onDestroy(),即service终止


后记:用这种方法启动的service和actiivty没联系,但是在默认情况下是在同一进程的同一线程中的,如果此时终止activity,service还会继续运行,但是由于service在系统中的优先级较低,在内存不足时可能会被系统收回。


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 高压147低压110怎么办 宣武医院怎么办住院证 自主择业后悔了怎么办 建行app闪退怎么办 自己有房怎么办居住证 性格懒散不工作怎么办 脚受凉脚后跟疼怎么办 月子里脚着凉怎么办 腿着凉了疼怎么办 没有土地的农民怎么办 手机屁股坏了怎么办 包颈手术后睡中会勃起怎么办 武警义务兵训练不合格怎么办 空姐体检心率不齐怎么办 空姐体检差身高怎么办 锻炼过猛肌肉疼怎么办 中考体检有问题怎么办 想参军视力不够怎么办 公司体检查出乙肝怎么办 乙肝携带者福利体检怎么办 小孩没考好我该怎么办 客户考虑我该怎么办 明天中考 我该怎么办 考试考差了怎么办 没考上理想高中怎么办 我是差学生中考怎么办 衬衫后背鼓起来怎么办 高考体检表没了怎么办 高考体检视力不合格怎么办 高考体检转氨酶高怎么办 高考体检肝功能异常怎么办 高考体检有乙肝怎么办 高考体检有纹身怎么办 学校体检血压高怎么办 高考体检不属实怎么办 艺考身上有花臂怎么办 义务兵因病致残怎么办 新兵练成绩优秀怎么办 阿提拉部队得了瘟疫怎么办 公安体能测评胖子怎么办 社区工作者笔试不及格怎么办