service类
public class MyService extends Service { private String name = "zzz"; private boolean running = false; public MyService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. Log.i("lgqq","body=33444====onBind"); return new MyBinder(); } public class MyBinder extends Binder implements IBinder { public void setName(String name) { MyService.this.name = name; } public MyService getService() { return MyService.this; } } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("lgqq","body=233====onStartCommand"); // return super.onStartCommand(intent, flags, startId); return START_STICKY; } @Override public void onCreate() { super.onCreate(); Log.i("lgqq","body==22===onCreate"); new Thread() { @Override public void run() { super.run(); running = true; int i = 0; while (running) { if (onMyServiceListener != null) { onMyServiceListener.onNameChange(name + (i++));//service参数传到context } try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } @Override public void onDestroy() { super.onDestroy(); running = false; } private OnMyServiceListener onMyServiceListener = null; public void setOnMyServiceListener(OnMyServiceListener onMyServiceListener) { this.onMyServiceListener = onMyServiceListener; } public OnMyServiceListener getOnMyServiceListener() { return onMyServiceListener; } public static interface OnMyServiceListener { void onNameChange(String name); } }
activity类
public class MyServiceactivity extends AppCompatActivity implements ServiceConnection { private static final int RECALL_NAME = 0; private TextView textView; private EditText editText; private MyService.MyBinder binder; private android.os.Handler handler = new android.os.Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.arg1 == RECALL_NAME) { textView.setText(msg.getData().getString("name")); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.myservicetesx); textView = (TextView) findViewById(R.id.textView); editText = (EditText) findViewById(R.id.editText); Intent intent = new Intent(this, MyService.class); startService(intent); bindService(intent, this, Context.BIND_AUTO_CREATE); findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (binder != null) { binder.setName(editText.getText().toString());//context参数传到service } } }); findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { unbindService(); } }); } private void unbindService() { if (binder != null) { unbindService(this); binder = null; } } @Override public void onServiceConnected(ComponentName name, IBinder service) { binder = (MyService.MyBinder) service; binder.getService().setOnMyServiceListener(new MyService.OnMyServiceListener() { @Override public void onNameChange(String name) { Message message = new Message(); Bundle bundle = new Bundle(); bundle.putString("name", name); message.setData(bundle); message.arg1 = RECALL_NAME; handler.sendMessage(message); } }); } @Override public void onServiceDisconnected(ComponentName name) { unbindService(); } @Override protected void onDestroy() { super.onDestroy(); unbindService(); } }