service:后台运行 没有界面的组件
Intent
startService();
stopService();
服务一旦被创建,就不会重新创建了.
服务的oncreate方法只会执行一次,如果服务已经开启,就不会再去执行oncreate方法
服务在停止的时候,会调用ondestroy方法
每一次开启服务的时候 都会调用 onStartCommand() onStart();
服务有两种开启方式:
1. startService(); 服务一旦开启就跟开启者(activity)没有什么关系.activity挂了,
服务还会开心的在后台运行.
2. bindService(); 服务跟activity就有了千丝万缕的联系. 如果调用者activity挂了
服务也跟着挂了. 不求同时生,但求同时死.
服务只能被显示的解除绑定一次,多次的解除绑定服务 应用程序会报异常
----------------------
绑定服务调用服务里面方法的流程:
1. 在activity 采用bindService方式开启服务...
2. 写一个实现类 MyConn implements ServiceConnection
3. 接口里面有一个方法onServiceConnected 在服务成功绑定的时候调用的方法
4. 在service代码 实现 onBind方法 返回一个IBinder接口的实现( 里面必须一个调用服务方法的api)
5. 在服务成功绑定的时候 服务里面返回的IBinder对象会传给 activity里面onServiceConnected 方法
6. 获取IBinder对象 中间人, 调用中间人的方法. 间接调用了服务里面的方法
绑定服务调用服务里面方法的流程:
1. 在activity 采用bindService方式开启服务...
2. 写一个实现类 MyConn implements ServiceConnection
3. 接口里面有一个方法onServiceConnected 在服务成功绑定的时候调用的方法
4. 在service代码 实现 onBind方法 返回一个IBinder接口的实现( 里面必须一个调用服务方法的api)
5. 在服务成功绑定的时候 服务里面返回的IBinder对象会传给 activity里面onServiceConnected 方法
6. 获取IBinder对象 中间人, 调用中间人的方法. 间接调用了服务里面的方法
-------------------------------------------------------------------------------------------
public class MainActivity extends Activity
{
private ServiceConnection conn;
private IService mybinder;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);
}
/**
* 开启服务:已绑定服务的方式获取服务中的代理人,间接调用服务内的方法
*/
public void start(View
view){
System. out.println( "服务开启...");
Intent intent= new Intent(getApplicationContext(),MyService.class );
conn= new MyConn();
bindService(intent, conn, BIND_AUTO_CREATE);
// onBindService(conn); conn=null; 关闭服务并将服务置为空
}
// 2.实现serviceConnection接口
private class MyConn implements ServiceConnection{
//服务成功绑定时
@Override
public void onServiceConnected(ComponentName
name, IBinder service) {
mybinder=
(IService) service; //获取代理人对象
System. out.println( "Activity得到服务返回的代理人....." );
}
//当服务异常终止....失去连接的时候调用的方法
@Override
public void onServiceDisconnected(ComponentName
name) {
}
}
/**
* 调用服务内方法
* @param view
*/
public void getMethod(View
view){
mybinder.Method(15000);
}
}
-------------------------------------------------------------------------------------------
/**
* 成功绑定服务时调用的方法
*/
@Override
public IBinder
onBind(Intent arg0) {
System. out.println( "服务被成功绑定时....返回代理人对象" );
return new MyBind();
}
/**
* 将服务分方法交给代理人代理
* @author Administrator
*
*/
public class
MyBind extends Binder{
/**
* 服务内的方法
* @param money
*/
public boolean
Method( long money){
if(money>10000){
System. out.println( "卖给你清华大学毕业证了...." );
Toast. makeText(getApplicationContext(), "卖给你清华大学毕业证了...." ,
0).show();
return true;
} else{
System. out.println( "没钱还想买证书?......" );
Toast. makeText(getApplicationContext(), "没钱还想买证书?......",
0).show();
return false;
}
}
}
}
--------------------------------------------------------------------------------------
public interface IService
{
public boolean
Method( long money);
}