android开发之使用Messenger实现service与activity交互

时间:2024-01-14 18:15:50

service与activity交互的方式有多种,这里说说使用Messenger来实现两者之间的交互。

Service程序

public class MessengerService extends Service {

    final Messenger mMessenger = new Messenger(new IncomingHandler());
@Override
public IBinder onBind(Intent intent) {
return mMessenger.getBinder();
} @SuppressLint("HandlerLeak")
class IncomingHandler extends Handler { @Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
Toast.makeText(MessengerService.this,"Hello lenve!", Toast.LENGTH_LONG).show();
break;
case 1:
Toast.makeText(MessengerService.this,"Hello lenve!Hello world!", Toast.LENGTH_LONG).show();
break;
default:
break;
}
} }
}

MainActivity.java

public class MainActivity extends Activity {

    private Messenger mMessenger;
private ServiceConnection conn;
private Intent intent; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent = new Intent(this,MessengerService.class);
conn = new ServiceConnection() { @Override
public void onServiceDisconnected(ComponentName name) {
mMessenger = null;
} @Override
public void onServiceConnected(ComponentName name, IBinder service) {
mMessenger = new Messenger(service);
}
};
} @Override
protected void onStart() {
super.onStart();
bindService(intent, conn, BIND_AUTO_CREATE);
} @Override
protected void onStop() {
super.onStop();
unbindService(conn);
} public void onClick(View v){
Message msg = null;
switch (v.getId()) {
case R.id.button1:
msg = Message.obtain(null, 0, 0, 0);
try {
mMessenger.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
break;
case R.id.Button01:
msg = Message.obtain(null, 1, 0, 0);
try {
mMessenger.send(msg);
} catch (RemoteException e) {
e.printStackTrace();
}
break;
default:
break;
}
}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。若有错误地方,还望批评指正,不胜感激。