您的位置:首页 > 移动开发 > Android开发

android Service传值

2016-04-06 16:46 316 查看
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() {}@Overridepublic 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;}}@Overridepublic void onCreate() {super.onCreate();new Thread() {@Overridepublic 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();}@Overridepublic 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);}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: