大家好,欢迎来到IT知识分享网。
上一篇文章我们通过一个简单的例子来给大家展示了RxJava的基本用法,相信大家已经对RxJava有了大概的了解,由于上篇文章对RxJava的使用介绍都是点到为止,并没有进行深入展开,也许你对RxJava有种名不副实的感觉。OK,下面我们就进入正题,一步步的揭开RxJava的神秘面纱!
一个例子
RxJava的强大之处,在于它提供了非常丰富且功能强悍的操作符,通过使用和组合这些操作符,你几乎能完成所有你想要完成的任务,举个例子如下:
- 现在有一个需求:app启动时显示一张图片(一般是app的logo),也就是我们所说的欢迎页,2-3秒后自动跳转到主页面。这不就是几乎每个app都有的启动页需求吗?几乎不用思考,代码如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); ImageView view = (ImageView) findViewById(R.id.iv_welcome); view.setImageResource(R.drawable.welcome); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { startActivity(new Intent(WelcomeActivity.this, MainActivity.class)); finish(); } },2000); }
使用RxJava的代码实现如下:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); ImageView view = (ImageView) findViewById(R.id.iv_welcome); view.setImageResource(R.drawable.welcome); Observable.timer(2, TimeUnit.SECONDS, AndroidSchedulers.mainThread()).map(l->{ startActivity(new Intent(this, MainActivity.class)); finish(); return null; }).subscribe(); }
这里的RxJava使用了两个操作符:一个是timer操作符,它的意思是延迟执行某个操作;一个是map操作符,它的意思是转换某个执行结果。
恩,好像除了写法不一样,也没看出RxJava有什么优势呢。好吧,继续往下看!
2. 由于最近产品要做活动,为了在显著的位置把活动的内容显示给用户,经过讨论,就是在欢迎页停留2秒后,要跳转到活动内容的页面(也就是一张广告的图片)上,然后在活动内容的页面停留2-3秒,再跳转到主页面;
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); ImageView view = (ImageView) findViewById(R.id.iv_welcome); view.setImageResource(R.drawable.welcome); //开新线程从网络获取图片 AsyncAdImageFromNet(); Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { //mAdBitmapDrawable是从网络获取到的图片,如果获取到图片,则显示出来,否则直接跳转到主页面 if(mAdBitmapDrawable != null){ view.setImageDrawable(mAdBitmapDrawable); handler.postDelayed(new Runnable() { @Override public void run() { startActivity(new Intent(WelcomeActivity.this, MainActivity.class)); finish(); } }, 2000); } else { startActivity(new Intent(WelcomeActivity.this, MainActivity.class)); finish(); } } }, 2000); }
这段代码没有考虑离线情况,即没有网络的情况下是显示不出活动内容图片的,最好是在有网络的情况下就把图片下载到本地缓存起来,不管有没有网络都装载本地的缓存即可,改进后的代码如下:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_welcome); ImageView view = (ImageView) findViewById(R.id.iv_welcome); view.setImageResource(R.drawable.welcome); //本地图片缓存路径 File localBitmapFile = new File(getLocalBitmapPath());
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/142868.html