1.Service简单概述
Service(服务)是一个一种可以在后台执行长时间运行操作而没有用户界面的应用组件。服务可由其他应用组件启动(如Activity),服务一旦被启动将在后台一直运行,即使启动服务的组件(Activity)已销毁也不受影响。 此外,组件可以绑定到服务,以与之进行交互,甚至是执行进程间通信 (IPC)。 例如,服务可以处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序交互,而所有这一切均可在后台进行,Service基本上分为两种形式:
1、布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="25dp"
android:orientation="horizontal" >
<EditText
android:id="@+id/num1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="请输入一个数" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:text="+"
android:textSize="25sp" />
<EditText
android:id="@+id/num2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="请输入二个数" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:text="="
android:textSize="25sp" />
<TextView
android:id="@+id/num3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:text="?"
android:textSize="25sp" />
</LinearLayout>
<Button
android:id="@+id/log_cf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="计算" />
2、Service中的代码
public class MyService extends Service {
private SimplService iBinder;
// 创建继承Binder的类,直接继承Binder类比继承IBinder省事
public class SimplService extends Binder {
public MyService service() {
// 返回当前service
return MyService.this;
}
// 加法
public int add(int a, int b) {
return a + b;
}
}
@Override
public void onCreate() {
super.onCreate();
//在服务创建的时候就创建方法
iBinder = new SimplService();
}
@Override
public IBinder onBind(Intent intent) {
return iBinder;
}
}
3、MainActivity
public class MainActivity extends Activity {
private EditText num1;
private EditText num2;
private TextView num3;
private Button count;
private ServiceConnection scConnection;
private MyService.SimplService sBinder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 找控件
initViews();
// ServiceConnection 接口来取得建立连接 与 连接意外丢失的回调。
scConnection = new ServiceConnection() {
// 断开连接
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
// 连接
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 获取sBinder对象,可以调用其中的方法
sBinder = (SimplService) service;
}
};
/**
* bindService有三个参数,
* 第一个是用于区分 Service 的Intent 与 startService 中的 Intent 一致,
* 第二个是实现了 ServiceConnection 接口的对象,
* 最后一个是 flag 标志位。
* 有两个flag,BIND_DEBUG_UNBIND 与 BIND_AUTO_CREATE,
* 前者用于调试(详细内容可以查看javadoc 上面描述的很清楚),
* 后者默认使用。
* */
bindService(new Intent(MainActivity.this,MyService.class), scConnection, Context.BIND_AUTO_CREATE);
count.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 获取输入框的值
String numa = num1.getText().toString();
String numb = num2.getText().toString();
// 将string转成int
int add = sBinder.add(Integer.parseInt(numa),
Integer.parseInt(numb));
num3.setText(add + "");
}
});
}
private void initViews() {
num1 = (EditText) findViewById(R.id.num1);
num2 = (EditText) findViewById(R.id.num2);
num3 = (TextView) findViewById(R.id.num3);
count = (Button) findViewById(R.id.log_cf);
}
}
4、效果截图