Android Service 的使用(一)----简单Serivce的启动和停止
2012-03-19 17:34
495 查看
学习Android也有一段时间了,最近很想总结一下之前学过的知识点,不断的经验总结从中找到差距,查漏补缺才可能有长足的进步。下面就简单介绍一下Android四大基本组件Service的使用方法,希望对刚学习Android的新人有所帮助,同时也欢迎Android的老鸟们给点宝贵意见,让我知道自身不足,不断的加强巩固。
首先创建一个Service
方法:1. 右键点击所选取的包名“new”->“Class”,如下图:
2. 在Name字段后填写Service的名字(这里我起的名字是MyService),在Super字段后点击“Browser”,出现新的弹框,如下图:
3. 在“Choose a type”中打入关键字"service",选择android.app开头的,点击OK键。
此时,android的service就已经建立完成了,默认的程序如下:
public class MyService extends Service {
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
其中onBind(Intent intent):是必须实现的一个方法。
其次,填充完善Service的内容,告诉Service要做什么。代码如下:
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.d("zinc",">>>>>>>>>>service onCreate()<<<<<<<<<<<<");
Toast.makeText(MyService.this, "服务已建立", Toast.LENGTH_LONG).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.d("zinc",">>>>>>>>>>service onStart()<<<<<<<<<<<<<");
Toast.makeText(MyService.this, "服务已启动", Toast.LENGTH_LONG).show();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d("zinc",">>>>>>>>>>service onDestory()<<<<<<<<<<<<");
Toast.makeText(MyService.this, "服务已停止", Toast.LENGTH_LONG).show();
}
这里注意一点,继承的方法最好不要手动输入,最好直接由Eclipse导入。
在MyService的编辑区域右键选择"source"->"@override/Implement Method...",在新的窗口中勾选上面的几个方法。如下图:
最后还有一点也很重要--就是在AndroidManifest.xml注册这个Service,代码如下:
<service android:name="MyService">
<intent-filter>
<action android:name="com.android.zinc.MYSERVICE"/>
</intent-filter>
</service>
蓝色字体的部分还是相当重要的,不可遗漏。否则Service就接收不到intent消息从而无法启动这个Serivce,很多时候我们在调试代码的时候都很莫名,我明明Service定义的没错也没有报错怎么就是Service就是启动不起来,原因就在这个地方,有时候一粗心就把蓝色的部分遗漏了。
现在我们要做的是验证我们所写的service功能是否正常。
在Activity中,我们定义2个按键,一个启动Service,一个停止Service,这里就直接给出Activty的代码和layout.xml的代码了。
Activity的代码:
public class ServiceTestActivity extends Activity {
private Button startButton;
private Button stopButton;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startButton= (Button)findViewById(R.id.startbutton);
stopButton= (Button)findViewById(R.id.stopbutton);
startButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setAction("com.android.zinc.MYSERVICE");
startService(intent);
}
});
stopButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setAction("com.android.zinc.MYSERVICE");
stopService(intent);
}
});
}
}
layout.xml的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:id="@+id/startbutton"
android:layout_height="wrap_content"
android:text="@string/startservice" />
<Button
android:id="@+id/stopbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/stopservice" />
</LinearLayout>
如果把DDMS开关打开后,就可以看到如下图的log了,不过我这里是先点击“开始”按键再点击“停止”按键。多次点就
当然初学者可以一次点击“开始”后,不要点击“停止”按键,多次点击“开始”按键,看看DDMS会出现什么样的log?
首先创建一个Service
方法:1. 右键点击所选取的包名“new”->“Class”,如下图:
2. 在Name字段后填写Service的名字(这里我起的名字是MyService),在Super字段后点击“Browser”,出现新的弹框,如下图:
3. 在“Choose a type”中打入关键字"service",选择android.app开头的,点击OK键。
此时,android的service就已经建立完成了,默认的程序如下:
public class MyService extends Service {
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
其中onBind(Intent intent):是必须实现的一个方法。
其次,填充完善Service的内容,告诉Service要做什么。代码如下:
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.d("zinc",">>>>>>>>>>service onCreate()<<<<<<<<<<<<");
Toast.makeText(MyService.this, "服务已建立", Toast.LENGTH_LONG).show();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.d("zinc",">>>>>>>>>>service onStart()<<<<<<<<<<<<<");
Toast.makeText(MyService.this, "服务已启动", Toast.LENGTH_LONG).show();
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d("zinc",">>>>>>>>>>service onDestory()<<<<<<<<<<<<");
Toast.makeText(MyService.this, "服务已停止", Toast.LENGTH_LONG).show();
}
这里注意一点,继承的方法最好不要手动输入,最好直接由Eclipse导入。
在MyService的编辑区域右键选择"source"->"@override/Implement Method...",在新的窗口中勾选上面的几个方法。如下图:
最后还有一点也很重要--就是在AndroidManifest.xml注册这个Service,代码如下:
<service android:name="MyService">
<intent-filter>
<action android:name="com.android.zinc.MYSERVICE"/>
</intent-filter>
</service>
蓝色字体的部分还是相当重要的,不可遗漏。否则Service就接收不到intent消息从而无法启动这个Serivce,很多时候我们在调试代码的时候都很莫名,我明明Service定义的没错也没有报错怎么就是Service就是启动不起来,原因就在这个地方,有时候一粗心就把蓝色的部分遗漏了。
现在我们要做的是验证我们所写的service功能是否正常。
在Activity中,我们定义2个按键,一个启动Service,一个停止Service,这里就直接给出Activty的代码和layout.xml的代码了。
Activity的代码:
public class ServiceTestActivity extends Activity {
private Button startButton;
private Button stopButton;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
startButton= (Button)findViewById(R.id.startbutton);
stopButton= (Button)findViewById(R.id.stopbutton);
startButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setAction("com.android.zinc.MYSERVICE");
startService(intent);
}
});
stopButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setAction("com.android.zinc.MYSERVICE");
stopService(intent);
}
});
}
}
layout.xml的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:layout_width="wrap_content"
android:id="@+id/startbutton"
android:layout_height="wrap_content"
android:text="@string/startservice" />
<Button
android:id="@+id/stopbutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/stopservice" />
</LinearLayout>
如果把DDMS开关打开后,就可以看到如下图的log了,不过我这里是先点击“开始”按键再点击“停止”按键。多次点就
当然初学者可以一次点击“开始”后,不要点击“停止”按键,多次点击“开始”按键,看看DDMS会出现什么样的log?
相关文章推荐
- 初学Android,创建,启动,停止Service(五十八)
- Android中Service的启动方式的区别和结合使用
- Android Service使用方法--简单音乐播放实例
- 使用C#代码安装、启动、停止、卸载Windows service(不使用InstallUtil.exe)
- Android Service使用方法--简单音乐播放实例
- android Service 的简单使用(学习别人)
- android Service 的简单使用
- android 程序强制停止后服务后台启动运行 ---- 不同程序间相助 使用第三方服务
- AIDL通信 android 在5.0以使用隐式Intent方式来启动Service的问题
- android Service 的简单使用
- 一个简单的demo学习Android远程Service(AIDL的使用)
- 一个简单的demo学习Android远程Service(AIDL的使用)
- Android使用简单的Service
- Android Service 同时使用bindservice和startservice启动的问题
- 一个简单的demo学习Android远程Service(AIDL的使用)
- Android 5.0 不再允许使用隐式Intent来启动Service
- Android使用bindService启动服务
- Android Service使用方法--简单音乐播放实例
- 一个简单的demo学习Android远程Service(AIDL的使用
- Android Service 启动和停止服务