http://edu.csdn.net/news/2012822/94c48aab2574.shtml
http://bbs.itheima.com/thread-60883-1-1.html?130809fstedm
原理图:
步骤:
调用服务里面的方法:
1 设计一个接口:IStudentQueryService Student queryStudent(int no);
2 在activity里面进行绑定操作:
bindService(intent,conn,flag);
3 写一个连接实现类:
private final class MyServiceConnection implements ServiceConnection{
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
ibinder = (IStudnetQueryService) service;
}
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
conn = null;
ibinder = null;
}
}
4 在activity里面用IStudentQueryService 来接收onServiceConnected(ComponentName name, IBinder service)
返回过来的IBinder对象。
5 写一个StudentService extends Service ,重写onBind()
编译一个内部类StudentBinder extends Binder implements IStudnetQueryService
6 创建StudentBinder的对象,通过onBind()方法返回。
7 在activity通过onBind()返回的对象调用服务里面的方法。
代码如下:
1、main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="学号" /> <EditText android:id="@+id/et_no" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="number" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="查询" android:onClick="query1" /> <TextView android:id="@+id/tv_info" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
2、MainActivity
package com.njupt.studentquery1; import android.os.Bundle; import android.os.IBinder; import android.app.Activity; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.view.Menu; import android.view.View; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { private EditText et_no; private TextView tv_info; private MyServiceConnection conn; private IStudentQueryService ibinder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); et_no = (EditText) findViewById(R.id.et_no); tv_info = (TextView) findViewById(R.id.tv_info); conn = new MyServiceConnection(); Intent intent = new Intent(this,StudentService.class); bindService(intent,conn,BIND_AUTO_CREATE); } private class MyServiceConnection implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { ibinder = (IStudentQueryService) service; } @Override public void onServiceDisconnected(ComponentName name) { ibinder = null; conn = null; } } @Override protected void onDestroy() { super.onDestroy(); unbindService(conn); } public void query1(View v){ String no = et_no.getText().toString(); Student student = ibinder.queryStudent(Integer.parseInt(no)); tv_info.setText(student.toString()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
3、StudentService
package com.njupt.studentquery1; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; public class StudentService extends Service { private StudentBinder ibinder = new StudentBinder(); private Student[] students = new Student[]{ new Student(1,"章泽天",21), new Student(2,"刘诗诗",22), new Student(3,"allen",21) }; @Override public IBinder onBind(Intent intent) { return ibinder; } private class StudentBinder extends Binder implements IStudentQueryService{ public Student queryStudent(int no){ return query(no); } } public Student query(int no){ return students[no - 1]; } }
4、IStudentQueryService
package com.njupt.studentquery1; public interface IStudentQueryService { public Student queryStudent(int no); }
5、Student
package com.njupt.studentquery1; public class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public Student() { super(); } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
6、AndroidManifest.xml
记得在清单文件中吧service 给注册上去
<service android:name="com.njupt.studentquery1.StudentService"/>
今天吸取了一个教训,任何的任命和公布制度之前一定要想好进路和退路,进路当然不用特意去想就能知道,这个人上任或制度推出效果比较理想,那么如果不理想呢,是否知道接下来改如何去做呢?后面一点非常重要,有时候我们在考虑任命和制度的时候老给自己套个框框,按照自己理想化的思维去考虑问题,其实多数情况下事情的发展是不会随着我们的意志做转移的,那么我们至少要做到想好的方面也要考虑到坏的方面,我们想前一步也要考虑好退一步怎么办。所谓三思就是这个意思!这样也算是管理上做到游刃有余了!一点感受仅供参考,欢迎轻喷!