android学习--------Service
2015-09-30 16:29
381 查看
一 Service是什么及不是什么
Service是什么:Service是能够在后台长时间运行操作并且不提供用户界面的应用程序组件。其他应用组件能启动服务,并且即使用户切换到另一个应用程序,服务还可以在后台运行。
Service不是什么:官方文档解释如下
Service不是一个单独的进程。
Service不是一个线程。
二 Service的分类
(1)Started(启动):当应用程序组件(如Activity)通过调用StartService()方法启动服务时,服务处于Started状态。一旦启动,服务能在后台无限期运行,即使启动他的组件已经被销毁。
(2)Bound(绑定):当应用程序组件通过调用bindService()方法绑定到服务时,服务处于bound状态。绑定服务提供客户端--服务器接口,以允许组件与服务交互、发送请求、获得结果,甚至使用进程间通信(IPC)跨进程完成这些操作。仅当其他应用程序组件与之绑定时,绑定服务才运行。多个组件可以一次绑定到一个服务上,当他们都解绑定时,服务被销毁。
例1: 继承Service输出当前时间
(1)布局文件一个按钮,按下输出当前时间。
(2)创建CurrentTimeService类,它继承了Service
<span style="font-size:14px;">public class CurrentTimeService extends Service{
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Time time = new Time(); //创建Time对象
time.setToNow(); //设置时间为当前时间
String currentTime = time.format("%Y-%m-%d %H:%M:%S");//设置时间格式
Log.i("Currenttime",currentTime);
return START_STICKY;
}
}</span>
(3)
<span style="font-size:14px;">public class MainActivity extends ActionBarActivity {
private Button currentTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
currentTime = (Button) findViewById(R.id.currentTime);
currentTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,CurrentTimeService.class);
startService(intent);
}
});
}
}</span>
(4)最后要在配置文件中增加Service配置
<span style="font-size:14px;"><service android:name=".CurrentTimeService"></service></span>
例2:继承Binder类绑定服务显示时间
(1)布局文件一个按钮,按下输出当前时间。
(2)创建CurrentTimeService类,它继承了Service类。内部类LocalBinder继承了Binder类,用于返回CurrentTimeService类的对象。getCurrentTime()方法用于返回当前时间。
<span style="font-size:14px;">public class CurrentTimeService extends Service{
private final IBinder binder = new LocalBinder();
public class LocalBinder extends Binder{
CurrentTimeService getService(){
//返回当前服务的实例
return CurrentTimeService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return binder;
}
public String getCurrentTime() {
Time time = new Time();
time.setToNow();
String currentTime = time.format("%Y-%m_%d %H:%M:%S");
return currentTime;
}
}</span>
(3)
<span style="font-size:14px;">public class MainActivity extends ActionBarActivity {
CurrentTimeService cts;
boolean bound;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Button currentTime = (Button) findViewById(R.id.currentTime);
currentTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,CurrentTimeService.class);
bindService(intent, conn,BIND_AUTO_CREATE); //绑定服务
if (bound) { //如果绑定则显示当前时间
Toast.makeText(MainActivity.this,cts.getCurrentTime(),Toast.LENGTH_LONG).show();
}
}
});
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if (bound) {
bound = false;
unbindService(conn); //解绑定
}
}
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
bound = false;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
LocalBinder binder = (LocalBinder)service; //获得自定义的LocalBinder
cts = binder.getService(); //获得CurrentTimeService对象
bound = true;
}
};
}
</span>
(4)在配置文件中添加
<service android:name=".CurrentTimeService"></service>
三 官方API----------点击打开链接
Service是什么:Service是能够在后台长时间运行操作并且不提供用户界面的应用程序组件。其他应用组件能启动服务,并且即使用户切换到另一个应用程序,服务还可以在后台运行。
Service不是什么:官方文档解释如下
Service不是一个单独的进程。
Service不是一个线程。
二 Service的分类
(1)Started(启动):当应用程序组件(如Activity)通过调用StartService()方法启动服务时,服务处于Started状态。一旦启动,服务能在后台无限期运行,即使启动他的组件已经被销毁。
(2)Bound(绑定):当应用程序组件通过调用bindService()方法绑定到服务时,服务处于bound状态。绑定服务提供客户端--服务器接口,以允许组件与服务交互、发送请求、获得结果,甚至使用进程间通信(IPC)跨进程完成这些操作。仅当其他应用程序组件与之绑定时,绑定服务才运行。多个组件可以一次绑定到一个服务上,当他们都解绑定时,服务被销毁。
例1: 继承Service输出当前时间
(1)布局文件一个按钮,按下输出当前时间。
(2)创建CurrentTimeService类,它继承了Service
<span style="font-size:14px;">public class CurrentTimeService extends Service{
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Time time = new Time(); //创建Time对象
time.setToNow(); //设置时间为当前时间
String currentTime = time.format("%Y-%m-%d %H:%M:%S");//设置时间格式
Log.i("Currenttime",currentTime);
return START_STICKY;
}
}</span>
(3)
<span style="font-size:14px;">public class MainActivity extends ActionBarActivity {
private Button currentTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
currentTime = (Button) findViewById(R.id.currentTime);
currentTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,CurrentTimeService.class);
startService(intent);
}
});
}
}</span>
(4)最后要在配置文件中增加Service配置
<span style="font-size:14px;"><service android:name=".CurrentTimeService"></service></span>
例2:继承Binder类绑定服务显示时间
(1)布局文件一个按钮,按下输出当前时间。
(2)创建CurrentTimeService类,它继承了Service类。内部类LocalBinder继承了Binder类,用于返回CurrentTimeService类的对象。getCurrentTime()方法用于返回当前时间。
<span style="font-size:14px;">public class CurrentTimeService extends Service{
private final IBinder binder = new LocalBinder();
public class LocalBinder extends Binder{
CurrentTimeService getService(){
//返回当前服务的实例
return CurrentTimeService.this;
}
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return binder;
}
public String getCurrentTime() {
Time time = new Time();
time.setToNow();
String currentTime = time.format("%Y-%m_%d %H:%M:%S");
return currentTime;
}
}</span>
(3)
<span style="font-size:14px;">public class MainActivity extends ActionBarActivity {
CurrentTimeService cts;
boolean bound;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Button currentTime = (Button) findViewById(R.id.currentTime);
currentTime.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,CurrentTimeService.class);
bindService(intent, conn,BIND_AUTO_CREATE); //绑定服务
if (bound) { //如果绑定则显示当前时间
Toast.makeText(MainActivity.this,cts.getCurrentTime(),Toast.LENGTH_LONG).show();
}
}
});
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if (bound) {
bound = false;
unbindService(conn); //解绑定
}
}
private ServiceConnection conn = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
bound = false;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
LocalBinder binder = (LocalBinder)service; //获得自定义的LocalBinder
cts = binder.getService(); //获得CurrentTimeService对象
bound = true;
}
};
}
</span>
(4)在配置文件中添加
<service android:name=".CurrentTimeService"></service>
三 官方API----------点击打开链接
相关文章推荐
- Hello, Android 深入(一)
- Android Studio如何发布APK
- 来自知乎的Android学习总结
- Android清除本地数据缓存代码
- AndroidManifest.xml中uses-sdk配置详解
- Android 的ThreadLocal 详解
- androidstudio获取sha1
- Android手机拍照上传旋转90度问题
- Android View 事件分发机制 && Android ViewGroup 事件分发机制 源码解析 --总结
- Font-Awesome for android
- Android EditText 重新获得焦点
- Android中内容观察者的使用---- ContentObserver类详解
- Android中的复制粘贴
- Android的init过程详解(一)
- Android Android Studio 快捷键整理分享,IntelliJ IDEA使用技巧一览表
- 第一个Android实例——计算器 编辑
- Windows下Ionic Android开发环境搭建
- Android SDK API 15 各安装包下载地址
- Android5.X Activity跳转动画
- android fragment 你应该知道的一切