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);}}
相关文章推荐
- ANDROID L——Material Design详解(主题和布局)
- android自定义圆盘时钟
- Android Studio导入jar包和删除jar包
- android——ImageLoader添加缓存
- android gradle
- Android 使用系统相机拍摄照片保存到本地并在系统相册中显示
- Android Studio项目目录结构介绍
- Android下常用的图像处理程序(灰度化、线性灰度变化、二值化)
- Android上传图片之调用系统拍照和从相册选择图片
- Android中使用Bundle交换数据
- 如何用Android开发工具引用百度地图
- Android开发:客户端与服务器通过传递和接收json数据进行交互
- Android分包MultiDex原理详解
- Android 属性动画跟插值器估值器
- Android Studio 连接自己的git服务器
- Android View动画的特殊使用场景
- Android 之 Animation
- 查看Android应用包名package和入口activity名称
- vlc for android 主题属性分析
- Android开发之Intent.Action