原文出处:http://stormzhang.com/devtools/2014/12/09/android-studio-tutorial3/Android Studio 1.0正式版发布啦今天是个大日子,Android Studio 1.0 终于发布了正式版, 这对于Android开发者来说简直是喜大普奔的大消息啊,那么就果断来下载使用。官方下载地址: http://developer.android.com/sdk/index.
原文出处:http://stormzhang.com/devtools/2014/11/28/android-studio-tutorial2/上面一篇博客,介绍了Studio的优点与1.0 RC的安装与上手体验,没想到google的更新速度这么快,已经出了RC 2版本,主要是修复一些bug。那么今天就带大家预览下Stduio的界面与基本功能。
原文出处:http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1/背景相信大家对Android Studio已经不陌生了,Android Studio是Google于2013 I/O大会针对Android开发推出的新的开发工具,目前很多开源项目都已经在采用,Google的更新速度也很快,明显能感觉到这是Android开发的未来,那么我们还有什么理由不去拥抱未来呢?
Android Studio 是一个为 Android 平台开发程序的集成开发环境。2013 年 5 月 16 日由 Google 产品经理 Ellie Powers 在 Google I/O 上发布,可供开发者免费使用。2013 年 5 月发布早期预览版本,版本号为 0.1。2014 年 6 月发布 0.8 版本,至此进入 Beta 阶段。第一个稳定版本于 2014 年 12 月 8 日发布。
我们的旅程结束了。相信你已经准备好将你的Java应用带到一个新的代码质量水平。你可以享受一个新的编程模式并把更流畅的思维方式应用到日常编程生活中。RxJava提供了一种以面向时序的方式考虑数据的机会:所有事情都是持续变化的,数据在更新,事件在触发,然后你就可以创建事件响应式的、灵活的、运行流畅的App。
我们从REST API获取到数据后,我们需要把它绑定View上,并用一个适配器填充列表。我们的RecyclerView适配器是标准的。它继承于RecyclerView.Adapter并指定它自己的ViewHolder:public static class ViewHolder extends RecyclerView.ViewHolder { @InjectView(R.id.name) TextView name; @InjectView(R.id.city) TextView city; @InjectView(R.id.
我们将在onCreate()方法里创建SwipeRefreshLayout和RecyclerView;我们有一个refreshList()方法来处理用户列表的获取和展示,showRefreshing()方法来管理进度条和RecyclerView的显示。我们的refreshList()函数看起来如下:private void refreshList() { showRefresh(true); mSeApiManager.getMostPopularSOusers(10) .subscribe(users ->
我们不使用任何MVC,MVP,或者MVVM模式。因为那不是这本书的目的,因此我们的Activity类将包含我们需要创建和展示用户列表的所有逻辑。
Retrofit是Square公司专为Android和Java设计的一个类型安全的REST客户端。它帮助你轻松地与任意REST API交互,并完美兼容RxJava:所有的JSON响应对象都被映射成原始的Java对象,并且所有的网络调用都基于Rxjava Observable这些对象。使用API文档,我们可以定义我们从服务器接收的JSON响应数据。
我们将在已有的例子中创建一个新的Activity。这个Activity将通过StackExchange API从stackoverflow检索出最活跃的10位用户。App使用这些信息来展示一个包含用户头像、姓名、名望数以及住址的列表。对每一位用户,app使用OpenWeatherMap API来检索该用户住址当地的天气预报,并显示一个小天气图标。
在上一章中,我们学习了如何使用调度器在不同于UI线程的线程上操作。我们学习了如何高效的运行I/O任务而不用阻塞UI以及如何运行耗时的计算任务而不耗损应用性能。在最后一章中,我们将创建一个最终版的应用实例,用Retrofit映射远程API,异步查询数据,轻松创造一个丰富的UI。
这一章中,我们学习了如何简单的将多线程应用在我们的App中。RxJava为此提供了极其实用的工具:调度器。调度器以及不同应用场景下的优化方案一起,将我们从StrictMode中的不合法操作以及阻塞I/O的方法中解放出来。我们现在可以用简单的,响应式的,并在整个App中保持一致的方式来访问本地存储和网络。
在当今99%的移动应用中网络都是必不可缺的一部分:总是需要连接远程服务器来检索App需要的信息。作为网络访问的第一个案例,我们将创建下面这样一个场景:加载一个进度条。用一个按钮开始文件下载。下载过程中更新进度条。下载完后开始视频播放。我们的用户界面非常简单,我们只需要一个有趣的进度条和一个下载按钮。
我们已经知道如何处理缓慢的I/O操作。让我们看一个与I/O无关的耗时的任务。例如,我们修改loadList()函数并创建一个新的slow函数发射我们已安装的app数据。private Observable<AppInfo> getObservableApps(List<AppInfo> apps) { return Observable .create(subscriber -> { for (double i = 0; i < 1000000000;
我们学到了如何在一个调度器上运行一个任务。但是我们如何利用它来和Observables一起工作呢?RxJava提供了subscribeOn()方法来用于每个Observable对象。subscribeOn()方法用Scheduler来作为参数并在这个Scheduler上执行Observable调用。在“真实世界”这个例子中,我们调整loadList()函数。
现在我们知道如何在一个指定I/O调度器上来调度一个任务,我们可以修改storeBitmap()函数并再次检查StrictMode的不合规做法。为了这个例子,我们可以在新的blockingStoreBitmap()函数中重排代码。private static void blockingStoreBitmap(Context context, Bitmap bitmap, String filename) { FileOutputStream fOut = null; try { fOut = context.
调度器以一种最简单的方式将多线程用在你的Apps的中。它们时RxJava重要的一部分并能很好地与Observables协同工作。它们无需处理实现、同步、线程、平台限制、平台变化而可以提供一种灵活的方式来创建并发程序。RxJava提供了5种调度器:.io().computation().immediate().newThread().trampoline()让我们一个一个的来看下它们:Schedulers.
阻塞I/O的操作会导致App必须等待结果返回(阻塞结束)才能进行下一步操作。在UI线程上执行一个阻塞操作会将UI强行卡住,直接造成很糟糕的用户体验。我们激活StrictMode后,我们开始收到了关于我们的App错误操作磁盘I/O的不良信息。D/StrictMode StrictMode policy violation; ~duration=998 ms: android.os.
为了获得更多出现在代码中的关于公共问题的信息,我们激活了StrictMode模式。StrictMode帮助我们侦测敏感的活动,如我们无意的在主线程执行磁盘访问或者网络调用。正如你所知道的,在主线程执行繁重的或者长时的任务是不可取的。因为Android应用的主线程时UI线程,它被用来处理和UI相关的操作:这也是获得更平滑的动画体验和响应式App的唯一方法。
前面一章是最后一章关于RxJava的Observable的创建和操作的章节。我们学习到了如何将两个或更多的Observables合并在一起,join它们,zip它们,merge它们以及如何创建一个新的Observable来满足我们特殊的需求。本章中,我们提升标准看看如何使用RxJava的调度器来处理多线程和并发编程的问题。我们将学习到如何以响应式的方式创建网络操作,内存访问,以及耗时任务。
关注时代Java