1.创建Service代码模板
MyService 、MyActivity
package com.xsj.service; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; public class MyService extends Service { private int count = 0; private MyBinder binder = new MyBinder(); private boolean flag = true; /** * 通过继承Binder来实现IBinder */ public class MyBinder extends Binder { // 这里返回了Service运行的状态,即计数值 public int getCount() { return count; } } /** * 必须实现的方法,这里返回了IBinder对象 */ @Override public IBinder onBind(Intent intent) { return binder; } /** * Service被创建时回调该方法 */ @Override public void onCreate() { showCount(); } /** * Service被断开连接时回调的方法 */ @Override public boolean onUnbind(Intent intent) { return super.onUnbind(intent); } /** * Service被关闭之前回调的方法 */ @Override public void onDestroy() { flag = false; super.onDestroy(); } /** * 计数操作 */ private void showCount() { new Thread() { @Override public void run() { while (flag) { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } count++; } } }.start(); } }
package com.xsj.service; import android.app.Activity; import android.app.Service; import android.content.ComponentName; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import android.view.View; import android.widget.Button; import android.widget.Toast; public class MyActivity extends Activity { private Button start; private Button stop; private Button getCount; MyService.MyBinder binder; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); start = (Button) findViewById(R.id.start); stop = (Button) findViewById(R.id.stop); getCount = (Button) findViewById(R.id.get_count); final Intent intent = new Intent(); intent.setAction("com.xsj.SERVICE"); start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 绑定指定的service bindService(intent, conn, Service.BIND_AUTO_CREATE); } }); stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 在这里解除和service的绑定 unbindService(conn); } }); getCount.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MyActivity.this, "来自service - " + binder.getCount(), Toast.LENGTH_LONG) .show(); } }); } /** * ServiceConnection对象 */ private ServiceConnection conn = new ServiceConnection() { // 当activity和service断开连接时回调该方法 @Override public void onServiceDisconnected(ComponentName name) { } // 当activity和service连接成功时回调该方法 @Override public void onServiceConnected(ComponentName name, IBinder service) { // 获取service的onBind()方法所返回的MyBinder对象 binder = (MyService.MyBinder) service; } }; @Override protected void onResume() { super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); } }