android中service名词解释,Android中的Service组件具体解释

Service与Activity的差别在于:Service一直在后台执行,他没实用户界面,绝不会到前台来。

一,创建和配置Service

开发Service须要两个步骤:1。继承Service子类,2。在Manifest.xml文件里配置Service

Service中的方法:

public class FirstService extends Service

{

// 必须实现的方法。返回一个IBinder对象,应用程序可通过该对象与Service组件通信

@Override

public IBinder onBind(Intent arg0)

{

return null;

}

// Service被创建时回调该方法。

@Override

public void onCreate()

{

super.onCreate();

System.out.println("Service is Created");

}

// Service被启动时回调该方法

@Override

public int onStartCommand(Intent intent, int flags, int startId)

{

System.out.println("Service is Started");

return START_STICKY;

}

// Service被关闭之前回调。

@Override

public void onDestroy()

{

super.onDestroy();

System.out.println("Service is Destroyed");

}

}Manifest.xml中配置service

二,启动和停止Service

1,startService 启动的服务:主要用于启动一个服务执行后台任务,不进行通信。訪问者与Service没有关联。即使訪问者退出了。Service仍然执行。停止服务使用stopService

bindService 启动的服务:该方法启动的服务要进行通信。停止服务使用unbindService

public class StartServiceTest extends Activity

{

Button start, stop;

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 获取程序界面中的start、stop两个button

start = (Button) findViewById(R.id.start);

stop = (Button) findViewById(R.id.stop);

// 创建启动Service的Intent

final Intent intent = new Intent();

// 为Intent设置Action属性

intent.setAction("org.service.FIRST_SERVICE");

start.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View arg0)

{

// 启动指定Serivce

startService(intent);

}

});

stop.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View arg0)

{

// 停止指定Serivce

stopService(intent);

}

});

}2,绑定本地Service并与之通信

假设訪问者和Service之间须要进行方法调用或者数据传递,则应该使用bindService和unbindService方法启动关闭Service

boolean bindService(Intent service, ServiceConnection conn,int flags)方法:

service:这个參数通过Intent指定要启动的Service

conn:ServiceConnection 对象。该对象用于监听訪问者与Service之间的连接情况。

当訪问者与Service之间连接成功时将会回调ServiceConnection对象的onServiceConnected(ComponentName

name, IBinder service);当Service所在的宿主中止。导致Service与訪问者之间断开时会回调ServiceConnection对象的onServiceDisconnected(ComponentName name)方法

flags:绑定时是否自己主动创建Service。0或BIND_AUTO_CREATE

ServiceConnection对象的onServiceConnected方法中有一个IBinder对象。该对象就可以与被绑定Service之间的通信

通信原理:当开发Service是。

该Service类必须提供一个IBinder onBind(Intent intent)方法,在绑定本地Service的情况下,onBind(Intent

intent)方法所返回的IBinder对象会传给ServiceConnection对象的onServiceConnected的(ComponentName

name, IBinder service)的service參数。这样訪问者就可使用该IBinder对象与Service进行通信了

BindService.java

public class BindService extends Service//继承Service

{

private int count;

private boolean quit;

// 定义onBinder方法所返回的对象。此binder会传给訪问者

private MyBinder binder = new MyBinder();

// 通过继承Binder来实现IBinder类

public class MyBinder extends Binder //①

{

public int getCount()

{

// 获取Service的执行状态:count

return count;

}

}

// 必须实现的方法。绑定该Service时回调该方法

@Override

public IBinder onBind(Intent intent)

{

System.out.println("Service is Binded");

// 返回IBinder对象

return binder;

}

// Service被创建时回调该方法。

@Override

public void onCreate()

{

super.onCreate();

System.out.println("Service is Created");

// 启动一条线程、动态地改动count状态值

new Thread()

{

@Override

public void run()

{

while (!quit)

{

try

{

Thread.sleep(1000);

}

catch (InterruptedException e)

{

}

count++;

}

}

}.start();

}

// Service被断开连接时回调该方法

@Override

public boolean onUnbind(Intent intent)

{

System.out.println("Service is Unbinded");

return true;

}

// Service被关闭之前回调该方法。

@Override

public void onDestroy()

{

super.onDestroy();

this.quit = true;

System.out.println("Service is Destroyed");

}

}配置Service组件:

BindServiceTest.java

public class BindServiceTest extends Activity

{

Button bind, unbind, getServiceStatus;

// 保持所启动的Service的IBinder对象

BindService.MyBinder binder;

// 定义一个ServiceConnection对象

private ServiceConnection conn = new ServiceConnection()

{

// 当该Activity与Service连接成功时回调该方法

@Override

public void onServiceConnected(ComponentName name

, IBinder service)

{

System.out.println("--Service Connected--");

// 获取Service的onBind方法所返回的MyBinder对象

binder = (BindService.MyBinder) service; //①

}

// 当该Activity与Service断开连接时回调该方法

@Override

public void onServiceDisconnected(ComponentName name)

{

System.out.println("--Service Disconnected--");

}

};

@Override

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

// 获取程序界面中的start、stop、getServiceStatusbutton

bind = (Button) findViewById(R.id.bind);

unbind = (Button) findViewById(R.id.unbind);

getServiceStatus = (Button) findViewById(R.id.getServiceStatus);

// 创建启动Service的Intent

final Intent intent = new Intent();

// 为Intent设置Action属性

intent.setAction("org.crazyit.service.BIND_SERVICE");

bind.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View source)

{

// 绑定指定Serivce

bindService(intent, conn, Service.BIND_AUTO_CREATE);

}

});

unbind.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View source)

{

// 解除绑定Serivce

unbindService(conn);

}

});

getServiceStatus.setOnClickListener(new OnClickListener()

{

@Override

public void onClick(View source)

{

// 获取、并显示Service的count值

Toast.makeText(BindServiceTest.this,

"Serivce的count值为:" + binder.getCount(),

Toast.LENGTH_SHORT).show(); //②

}

});

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值