Android应用程序中有一项非常重要的技术--Service,它没有运行界面,运行在后台,但是有一点非常重要,Service并不是一个单独的进程,同时也不是一个线程,用来处理耗时的动作。
Service有两种使用方法,一种是start和stop,另一种是绑定服务。
当使用的是第一种方法时,直到用户停止这个服务,Service才会停止,即使是用户关闭这个Activity(应用程序),Service也一样会在后台运行。
当用户使用的是第二种方法时,一旦用户解除绑定或者停止了这个Activity(应用程序),Service也自动停止了,即它是随着Activity的生命周期运行的。
下面的截图是对Service的测试画面:
一下是程序的源代码:
public class A_Service01 extends Activity {
private Button button1;
private Button button2;
private Button button3;
private Button button4;
private MyService myService;
private ServiceConnection serviceConnection=new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
myService=null;
Toast.makeText(A_Service01.this, "Service Failed", Toast.LENGTH_SHORT).show();
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
//myService=((MyService.MyBinder)service).getService();
Toast.makeText(A_Service01.this, "Service Connected", Toast.LENGTH_SHORT).show();
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_a__service01);
button1=(Button)findViewById(R.id.button1);
button2=(Button)findViewById(R.id.button2);
button3=(Button)findViewById(R.id.button3);
button4=(Button)findViewById(R.id.button4);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final Intent intent=new Intent(A_Service01.this,MyService.class);
startService(intent);
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final Intent intent=new Intent(A_Service01.this,MyService.class);
stopService(intent);
}
});
button3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final Intent intent=new Intent(A_Service01.this, MyService.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
}
});
button4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
unbindService(serviceConnection);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_a__service01, menu);
return true;
}
}
public class MyService extends Service {
/*
* 出现这句话的原因是下面重载的onBind方法需要一个返回值
*/
private MyBinder myBinder=new MyBinder();
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
Log.d("MyService", "Myservice onBind");
return myBinder;
}
@Override
public void onRebind(Intent intent) {
// TODO Auto-generated method stub
super.onRebind(intent);
Log.d("MyService", "Myservice onRebind");
}
@Override
public boolean onUnbind(Intent intent) {
// TODO Auto-generated method stub
Log.d("MyService", "Myservice onUnbind");
return super.onUnbind(intent);
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.d("MyService", "Myservice onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.d("MyService", "flags---->"+flags);
Log.d("MyService", "startId---->"+startId);
Log.d("MyService", "Myservice onStartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.d("MyService", "Myservice onDestory");
}
public class MyBinder extends Binder{
MyService getService(){
return MyService.this;
}
}
}
分享到:
相关推荐
android bind life activity fragment 生命周期 绑定
matlab开发-块库bgv21的绑定图。块库支持使用标准Simulink和编辑器对键合图进行图形编程。
AltBeacon的Rx绑定(Android-Beacon-Library)
主要演示android的的service如何绑定的完整代码
一个可以快速搜索、绑定、连接、打开和关闭音频通道的工具类
FirebaseUI for Android — Firebase的UI绑定,允许您快速连接常见的UI元素至Firebase APIs,像实时数据库或Firebase身份验证
无线传感器网络实验教程---zstack协议栈中绑定
eclipse中绑定android源码的方法 1.下载android-2.2 source 2.解压放在android.jar所在目录的sources里即可(注意是sources而非source)。 比如我android.jar所在目录为 D:\android-sdk-windows\platforms\...
071集-Service的生命周期与绑定视频教程,讲解的比较详细,可以参考下哦。
matlab开发-键绑定AlterMatlabEditWorkeyBindings。键绑定改变了matlab编辑器的键盘快捷键。
android-bind-service工程介绍:---bindserver---实现本地绑定服务代码---aidl-service--实现了aidl服务---invoke-aidl-service--实现了调用aidl服务的客户端
2、针对对普通类绑定service进行测试 3、普通类可以绑定service,但是需要activity传入一个Contex参数 4、该测试可以将业务代码和activity或者service分离,实现程序更好的结构,提高代码可读性 5、欢迎大家一起讨论...
xamarin-android-ffmpeg Xamarin Android FFMpeg绑定 对于Android 6.0及更高版本,请使用Xamarin.Android.MP4Transcoder 从Android 6.0开始,严格禁止text relocations , ffmpeg使用的许多源文件都使用text ...
Android 开发指南(二) 服务绑定 Bound Service
Android Android Android Android 开发背景 � 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商...
go-sox - go绑定libsox
telegram-bot-api - Golang绑定Telegram Bot API
Android Service服务启动与绑定用法测试,这个android源码演示了如何启动和停止指定的android系统服务,如何Bind Server绑定服务和如何unBind Server解绑服务,并使用NotificationManager来弹出消息处理对话框。
第4章介绍四大组件的工作过程,包括根Activity的启动过程,Service的启动和绑定过程,广播的注册、发送和接收过程,Content Provider的启动过程。 第5章从源码角度分析上下文Context。 第6章介绍ActivityManager...
Android 数据绑定验证工具,快速帮你验证表单数据绑定状况