Service
Service是Android的四大组件之一,作用非常的重要(至于什么重要就不说了)。这里我提供一个样例,这个样例提供了startService和bindService二种开启线程的方式
样例代码:
关键代码:
1.Sample_2_6.java
public class Sample_2_6 extends Activity {
OnClickListener myOnClickListener;//监听方法
ServiceConnection connection;//得到ServiceConnection引用
Button startService;//startService按钮
Button stopService;//stopService按钮
Button bindService;//bindService按钮
Button unbindService;//unbindService按钮
public void onCreate(Bundle savedInstanceState) {//重写的onCreate方法
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
connection = new ServiceConnection(){
public void onServiceConnected(ComponentName arg0, IBinder arg1){}
public void onServiceDisconnected(ComponentName name){}
};
startService = (Button) findViewById(R.id.startService);
stopService = (Button) findViewById(R.id.stopService);
bindService = (Button) findViewById(R.id.bindService);
unbindService = (Button) findViewById(R.id.unbindService);
myOnClickListener = new OnClickListener(){
public void onClick(View v) {
Intent intent = new Intent(Sample_2_6.this,MyService.class);
if(v == startService){
startService(intent);
bindService.setEnabled(false);
unbindService.setEnabled(false);
}else if(v == stopService){
stopService(intent);
bindService.setEnabled(true);
unbindService.setEnabled(true);
}else if(v == bindService){
bindService(intent, connection, BIND_AUTO_CREATE);
startService.setEnabled(false);
stopService.setEnabled(false);
}else if(v == unbindService){
unbindService(connection);
startService.setEnabled(true);
stopService.setEnabled(true);
}
}
};
startService.setOnClickListener(myOnClickListener);
stopService.setOnClickListener(myOnClickListener);
bindService.setOnClickListener(myOnClickListener);
unbindService.setOnClickListener(myOnClickListener);
}
}
2.MyService.java
public class MyService extends Service{
MyThread myThread;//线程的引用
public void onCreate() {//重写的onCreate方法
Log.d("MyService", "onCreate");//打印日志
super.onCreate();
}
public void onStart(Intent intent, int startId) {//重写的onStart方法
Log.d("MyService", "onStart");//打印日志
if(myThread == null){
myThread = new MyThread();
myThread.start(); //启动线程
}
super.onStart(intent, startId);
}
public IBinder onBind(Intent arg0) {//重写的onBind方法
Log.d("MyService", "onBind");//打印日志
if(myThread == null){
myThread = new MyThread();
myThread.start(); //启动线程
}
return null;
}
public boolean onUnbind(Intent intent) {//重写的onUnbind方法
Log.d("MyService", "onUnbind");//打印日志
if(myThread != null){
myThread.flag = false;
myThread = null;//释放线程
}
return super.onUnbind(intent);
}
public void onDestroy() {//重写的onDestroy方法
Log.d("MyService", "onDestroy");//打印日志
if(myThread != null){
myThread.flag = false;
myThread = null;
}
super.onDestroy();
}
public class MyThread extends Thread{
boolean flag = true;//循环标志位
int i = 0;
public void run(){
while(flag){
Log.d("MyService", "i = " + (i++));//打印日志
try{
Thread.sleep(1000);//睡眠1秒钟
}catch(Exception e){//捕获异常
e.printStackTrace();//打印异常
}
}
}
}
}
源码下载地址: