public class MainActivity 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.activity_main); textView = (TextView) findViewById(R.id.textView); editText = (EditText) findViewById(R.id.editText); Intent intent = new Intent(this, MyService.class); 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()); } } }); 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(); } }
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. 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 void onCreate() { super.onCreate(); new Thread() { @Override public void run() { super.run(); running = true; int i = 0; while (running) { if (onMyServiceListener != null) { onMyServiceListener.onNameChange(name + (i++)); } 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); } }
版权声明:本文为baidu_25845567原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。