安卓开发观察者模式应用-一个service通知多个activity更新ui的实现
2017-08-31 16:13
706 查看
service与activity的交互:
1.接口回调
2.自定义广播
3.观察者模式
demo下载地址 源码传送门
今天练习了下使用观察者模式,service与多个activity的交互
service的实现
一个activity
第二个activity
实体类
demo下载 源码传送门
xml就不贴了 ,一看就懂
1.接口回调
2.自定义广播
3.观察者模式
demo下载地址 源码传送门
今天练习了下使用观察者模式,service与多个activity的交互
service的实现
package com.joey.observabledemo; import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.support.annotation.Nullable; import java.util.Observable; import java.util.Observer; /** * Created by Administrator on 2017/8/31. */ public class ContentService extends Service{ private MyObservable myObservable; @Nullable @Override public IBinder onBind(Intent intent) { return new LocalBinder(); } public final class LocalBinder extends Binder{ public ContentService getService(){ return ContentService.this; } } public void asyncPostPerson(final String name){ //模拟耗时,终止5秒 new Thread(){ @Override public void run() { super.run(); try { sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendMessage(handler.obtainMessage(0x01,name)); } }.start(); } /** * 添加观察者 * @param observer */ public void addObservable(Observer observer){ myObservable.addObserver(observer); } @Override public void onCreate() { super.onCreate(); myObservable = new MyObservable(); } private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case 0x01: String name = (String) msg.obj; Person person = new Person(); person.setName(name); myObservable.notifyChanged(p cc98 erson); break; default: break; } } }; private class MyObservable extends Observable{ public void notifyChanged(Person person){ this.setChanged(); this.notifyObservers(person); } } }
一个activity
public class MainActivity extends AppCompatActivity implements Observer{ private ContentService mService; private MyServiceConn conn; private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.content); conn = new MyServiceConn(); bindService(new Intent(this,ContentService.class),conn,BIND_AUTO_CREATE); } public void btnClick(View view) { switch (view.getId()){ case R.id.button1: startActivity(new Intent(MainActivity.this,SecondActivity.class)); break; default: break; } } public class MyServiceConn implements ServiceConnection{ @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { mService = ((ContentService.LocalBinder) iBinder).getService(); //将当前Activity添加为观察者 mService.addObservable(MainActivity.this); } @Override public void onServiceDisconnected(ComponentName componentName) { mService = null; } } @Override protected void onDestroy() { super.onDestroy(); unbindService(conn); } @Override public void update(Observable observable, Object o) { Person person = (Person) o; tv.setText(person.toString()); } }
第二个activity
public class SecondActivity extends AppCompatActivity implements Observer{ private TextView textView; private MyServiceConnection connection; private ContentService contentService; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); textView = (TextView) findViewById(R.id.content2); connection = new MyServiceConnection(); bindService(new Intent(SecondActivity.this,ContentService.class),connection,BIND_AUTO_CREATE); } public void btnClick(View view) { switch (view.getId()){ case R.id.button2: contentService.asyncPostPerson("大理石"); break; default: break; } } public class MyServiceConnection implements ServiceConnection{ @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { contentService = ((ContentService.LocalBinder) iBinder).getService(); contentService.addObservable(SecondActivity.this); } @Override public void onServiceDisconnected(ComponentName componentName) { contentService = null; } } @Override protected void onDestroy() { super.onDestroy(); unbindService(connection); } @Override public void update(Observable observable, Object o) { Person person = ((Person) o); textView.setText(person.toString()); } }
实体类
public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + '}'; } }
demo下载 源码传送门
xml就不贴了 ,一看就懂
相关文章推荐
- 如何实现一个只有广播和service的android应用没有activity
- 利用Handler更简单的实现Service与Activity的通信,更新UI
- 安卓APP采用观察者模式实现检测版本更新
- 手把手教您撸一个底部中心凸起的可以添加通知条数的底栏(安卓APP底栏点击第一次选中当前Fragment第二次点击更新当前页面(实现))
- 使用一个Activity进行所有界面的显示,观察者模式实现标题与底部根据中间页面的改变而改变
- ioS开发之UI基础--使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- 利用观察者模式实现Service与Activity的通信
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- 安卓APP采用观察者模式实现检测版本更新
- 【Android应用实例之四】计时器之通过Service&BroadcastReceiver实现UI动态更新
- iOS开发UI基础—23使用xib自定义UItableviewcell实现一个简单的团购应用界面布局
- 设计并实现一个LogService,应用开发时可以打印log到视图(TextView)中显示
- 三种方式实现在一个Activity中控制另一个Activity的UI的更新
- Android Service 通知Activity更新界面的方法研究|Service通过Broadcast更新UI
- 安卓Service向Activity传递数据,更新UI
- 利用Handler更简单的实现Service与Activity的通信,更新UI
- android通过观察者模式实现更新UI
- Android应用是否可以只有一个Service或Broadcast Reciver,而没有Activity?
- 安卓Android的TabActivity/TabHost实现每个Tab一个Activity(图标+文字)