<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 介紹 `rxjava-android` 模塊包含RxJava的Android特定的綁定代碼。它給RxJava添加了一些類,用于幫助在Android應用中編寫響應式(`reactive`)的組件。 - 它提供了一個可以在給定的Android `Handler` 上調度 `Observable` 的調度器 `Scheduler `,特別是在UI主線程上。 - 它提供了一些操作符,讓你可以更容易的處理 `Fragment` 和 `Activity` 的生命周期方法。 - 它提供了很多Android消息和通知組件的包裝類,用于與Rx的調用鏈搭配使用。 - 針對常見的Android用例和重要的UI,它提供了可復用的、自包含的響應式組件。(*即將到來*) # Binaries 你可以在 [http://search.maven.org](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22rxandroid%22) 找到用于Maven, Ivy, Gradle和其它構建系統的二進制文件和依賴信息。 [Maven](http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22rxandroid%22) 示例: ```xml <dependency> <groupId>io.reactivex</groupId> <artifactId>rxandroid</artifactId> <version>0.23.0</version> </dependency> ``` Ivy 示例: ```xml <dependency org="io.reactivex" name="rxandroid" rev="0.23.0" /> ``` 當前支持的最低API版本(`minSdkVersion`)是 `10` (Android 2.3/Gingerbread) # 示例 ## 在UI線程觀察(Observing) 在Android上,通常處理異步任務時你會在主線程上等待(observing)處理結果,一般情況下你使用 `AsyncTask` 達到這個目的。使用RxJava,你會使用 `observeOn` 操作符聲明你要在主線程等待 `Observable` 的結果: ```java public class ReactiveFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Observable.from("one", "two", "three", "four", "five") .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(/* an Observer */); } ``` 這個例子中,Observable在一個新的線程執行,結果通過 `onNext` 在主線程發射。 ## 在任意線程觀察(Observing) 前面的例子是一個普遍概念的特殊版本:Android使用一個叫 `Handler` 的類綁定異步通信到消息循環。為了在任意線程 `觀察` 一個Observable,需要創建一個與那個類關聯的 `Handler`,然后使用 `AndroidSchedulers.handlerThread` 調度器: ```java new Thread(new Runnable() { @Override public void run() { final Handler handler = new Handler(); // bound to this thread Observable.from("one", "two", "three", "four", "five") .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.handlerThread(handler)) .subscribe(/* an Observer */) // perform work, ... } }, "custom-thread-1").start(); ``` 這個例子中,Observable在一個新的線程執行,結果通過 `onNext` 在 `custom-thread-1` 線程上發射。(這個例子不太自然,因為你可以調用`observeOn(Schedulers.currentThread())`,但是它說清楚了這個想法。) ## Fragment和Activity生命周期 在Android上,要在異步操作中訪問框架中的對象有些棘手,那是因為Andoid系統可以決定銷毀(`destroy`)一個 `Activity`,例如,當一個后臺線程還在運行的時候,如果這個線程嘗試訪問一個已經死掉的`Activity`中的View對象,會導致異常退出(Crash)。(這也會導致內存泄露,因為 `Activity` 已經不可見了,你的后臺線程還持有它的引用。) 這仍然是在Android上使用RxJava需要關注的一個問題,但是通過使用 `Subscription`和其它Observable操作符,你可以優雅地解決這個問題。通常來說,當你在`Activity`中訂閱一個`Observable`的結果時(無論是直接的還是通過一個內部類),你必須在 `onDestroy` 里取消訂閱,就像下面例子里展示的那樣: ```java // MyActivity private Subscription subscription; protected void onCreate(Bundle savedInstanceState) { this.subscription = observable.subscribe(this); } ... protected void onDestroy() { this.subscription.unsubscribe(); super.onDestroy(); } ``` 這樣確保所有指向訂閱者(這個`Activity`)的引用盡快釋放,不會再有通知通過 `onNext` 發射給這個訂閱者。 有一個問題,如果由于屏幕方向的變化導致這個 `Activity` 被銷毀,在 `onCreate` 中這個Observable會再次啟動。你可以使用 `cache` 或 `replay` 操作符阻止它發生,這些操作符保證Observable在 `Activity` 的生命周期內存在(你可以在一個全局的緩存中保存它,比如放在Fragment中。)你可以使用任何操作符,只要能保證:當訂閱者訂閱一個已經在運行的Observable時,在它與`Activity` 解除關聯的這段時間里發射的數據都會被`回放`,并且來自這個Observable的任何離線通知都會正常分發。 # 參考資料 * [How the New York Times is building its Android app with Groovy/RxJava](http://open.blogs.nytimes.com/2014/08/18/getting-groovy-with-reactive-android/?_php=true&_type=blogs&_php=true&_type=blogs&_r=1&) by Mohit Pandey * [Functional Reactive Programming on Android With RxJava](http://mttkay.github.io/blog/2013/08/25/functional-reactive-programming-on-android-with-rxjava/) and [Conquering concurrency - bringing the Reactive Extensions to the Android platform](https://speakerdeck.com/mttkay/conquering-concurrency-bringing-the-reactive-extensions-to-the-android-platform) by Matthias K?ppler * [Learning RxJava for Android by example](https://github.com/kaushikgopal/Android-RxJava) by Kaushik Gopal * [Top 7 Tips for RxJava on Android](http://blog.futurice.com/top-7-tips-for-rxjava-on-android) and [Rx Architectures in Android](http://www.slideshare.net/TimoTuominen1/rxjava-architectures-on-android-8-android-livecode-32531688) by Timo Tuominen * [FRP on Android](http://slid.es/yaroslavheriatovych/frponandroid) by Yaroslav Heriatovych * [Rx for .NET and RxJava for Android](http://blog.futurice.com/tech-pick-of-the-week-rx-for-net-and-rxjava-for-android) by Olli Salonen * [RxJava in Xtend for Android](http://blog.futurice.com/android-development-has-its-own-swift) by Andre Medeiros * [RxJava and Xtend](http://mnmlst-dvlpr.blogspot.de/2014/07/rxjava-and-xtend.html) by Stefan Oehme * Grokking RxJava, [Part 1: The Basics](http://blog.danlew.net/2014/09/15/grokking-rxjava-part-1/), [Part 2: Operator, Operator](http://blog.danlew.net/2014/09/22/grokking-rxjava-part-2/), [Part 3: Reactive with Benefits](http://blog.danlew.net/2014/09/30/grokking-rxjava-part-3/), [Part 4: Reactive Android](http://blog.danlew.net/2014/10/08/grokking-rxjava-part-4/) - published in Sep/Oct 2014 by Daniel Lew
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看