From 5457d8a468c7470811669ace650583ee1ccf3801 Mon Sep 17 00:00:00 2001
From: xiaoyan <xiaoyan159@163.com>
Date: Thu, 30 Mar 2023 15:08:47 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A2=9E=E5=8A=A0=E5=8D=8F=E7=A8=8B?=
 =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E7=95=8C=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .idea/vcs.xml                                 |  6 +++
 app/src/main/AndroidManifest.xml              | 10 ++++-
 .../{testapplication => }/MainActivity.kt     | 19 +++-----
 .../RxAndroidActivity.java                    | 45 ++++++++++++-------
 .../testapplication/RxCoroutineActivity.kt    | 21 +++++++++
 .../main/res/layout/activity_coroutine.xml    | 17 +++++++
 app/src/main/res/layout/activity_main.xml     | 14 +++---
 .../main/res/layout/activity_rxandroid.xml    |  6 +++
 8 files changed, 100 insertions(+), 38 deletions(-)
 create mode 100644 .idea/vcs.xml
 rename app/src/main/java/com/navinfo/{testapplication => }/MainActivity.kt (72%)
 rename app/src/main/java/com/navinfo/{testapplication => }/RxAndroidActivity.java (91%)
 create mode 100644 app/src/main/java/com/navinfo/testapplication/RxCoroutineActivity.kt
 create mode 100644 app/src/main/res/layout/activity_coroutine.xml

diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 303d332..4d6f1d6 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,7 +15,7 @@
 <!--            android:exported="true"></service>-->
 
         <activity
-            android:name=".RxAndroidActivity"
+            android:name="com.navinfo.MainActivity"
             android:exported="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -23,6 +23,14 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
+        <activity
+            android:name="com.navinfo.RxAndroidActivity"
+            android:exported="true">
+        </activity>
+        <activity
+            android:name=".RxCoroutineActivity"
+            android:exported="true">
+        </activity>
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/navinfo/testapplication/MainActivity.kt b/app/src/main/java/com/navinfo/MainActivity.kt
similarity index 72%
rename from app/src/main/java/com/navinfo/testapplication/MainActivity.kt
rename to app/src/main/java/com/navinfo/MainActivity.kt
index f3a67f9..a782734 100644
--- a/app/src/main/java/com/navinfo/testapplication/MainActivity.kt
+++ b/app/src/main/java/com/navinfo/MainActivity.kt
@@ -1,14 +1,12 @@
-package com.navinfo.testapplication
+package com.navinfo
 
+import android.content.Intent
 import android.os.Bundle
 import android.os.PersistableBundle
 import android.util.Log
 import android.view.LayoutInflater
 import androidx.appcompat.app.AppCompatActivity
 import com.navinfo.testapplication.databinding.ActivityMainBinding
-import io.reactivex.Observable
-import io.reactivex.ObservableEmitter
-import io.reactivex.ObservableOnSubscribe
 import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.async
 import kotlinx.coroutines.launch
@@ -22,16 +20,9 @@ class MainActivity : AppCompatActivity {
     override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
         super.onCreate(savedInstanceState, persistentState)
         val listData = 1..20
-        // 最简单的RxJava示例
-        mainBinding.btnRxjava1.setOnClickListener {
-            Observable.create<String>{
-                for (i in listData) {
-                    it.onNext(i.toString())
-                }
-                it.onComplete()
-            }.subscribe {
-                println(it)
-            }
+        // 最简单的协程
+        mainBinding.btnStartRxjava.setOnClickListener {
+            startActivity(Intent(this@MainActivity, RxAndroidActivity::class.java))
         }
 
         mainBinding.btnStartCoroutine.setOnClickListener {
diff --git a/app/src/main/java/com/navinfo/testapplication/RxAndroidActivity.java b/app/src/main/java/com/navinfo/RxAndroidActivity.java
similarity index 91%
rename from app/src/main/java/com/navinfo/testapplication/RxAndroidActivity.java
rename to app/src/main/java/com/navinfo/RxAndroidActivity.java
index aef46e2..4a21f5c 100644
--- a/app/src/main/java/com/navinfo/testapplication/RxAndroidActivity.java
+++ b/app/src/main/java/com/navinfo/RxAndroidActivity.java
@@ -1,4 +1,4 @@
-package com.navinfo.testapplication;
+package com.navinfo;
 
 import android.os.Bundle;
 import android.util.Log;
@@ -38,7 +38,6 @@ public class RxAndroidActivity extends AppCompatActivity {
     // RxAndroid测试需要使用的数据
     private List<String> listData = new ArrayList<>();
     private Disposable disposable;
-    private Subscription subscription;
     @Override
     protected void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -304,19 +303,20 @@ public class RxAndroidActivity extends AppCompatActivity {
                 Flowable.create(new FlowableOnSubscribe<String>() {
                     @Override
                     public void subscribe(FlowableEmitter<String> emitter) throws Exception {
+                        RxAndroidActivity.this.emitter = emitter;
                         int i = 1;
                         while (true) {
-                            if (emitter.requested()>0) {
-                                Log.d(TAG, "前requested:"+emitter.requested());
-                                emitter.onNext((i++)+"");
-                                Log.d(TAG, "后requested:"+emitter.requested());
-                                Log.d(TAG, "背压发送数据:"+i+",当前的requested:"+emitter.requested());
-                            } else {
-                                Thread.sleep(1000);
+                            if (!emitter.isCancelled()) {
+                                if (emitter.requested()>0) {
+                                    Log.d(TAG, "前requested:"+emitter.requested());
+                                    emitter.onNext((i++)+"");
+                                    Log.d(TAG, "背压发送数据:"+i+",当前的requested:"+emitter.requested());
+                                }
                             }
                         }
                     }
                 }, BackpressureStrategy.BUFFER)
+                        .subscribeOn(Schedulers.io())
                         .observeOn(Schedulers.computation())
                         .subscribe(new FlowableSubscriber<String>() {
                             @Override
@@ -327,12 +327,14 @@ public class RxAndroidActivity extends AppCompatActivity {
 
                             @Override
                             public void onNext(String s) {
-                                try {
-                                    Thread.sleep(100);
-                                    Log.d(TAG, "OnNext:"+s);
-                                    subscription.request(1);
-                                } catch (InterruptedException e) {
-                                    e.printStackTrace();
+                                if (!emitter.isCancelled()) {
+                                    try {
+                                        subscription.request(1);
+                                        Thread.sleep(100);
+                                        Log.d(TAG, "OnNext:"+s);
+                                    } catch (InterruptedException e) {
+                                        e.printStackTrace();
+                                    }
                                 }
                             }
 
@@ -343,10 +345,21 @@ public class RxAndroidActivity extends AppCompatActivity {
 
                             @Override
                             public void onComplete() {
-
+                                Log.d(TAG, "onComplete:");
                             }
                         });
             }
         });
+
+        binding.rxSimple6.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                if (subscription!=null) {
+                    subscription.cancel();
+                }
+            }
+        });
     }
+    private Subscription subscription;
+    private FlowableEmitter emitter;
 }
diff --git a/app/src/main/java/com/navinfo/testapplication/RxCoroutineActivity.kt b/app/src/main/java/com/navinfo/testapplication/RxCoroutineActivity.kt
new file mode 100644
index 0000000..462d54b
--- /dev/null
+++ b/app/src/main/java/com/navinfo/testapplication/RxCoroutineActivity.kt
@@ -0,0 +1,21 @@
+package com.navinfo.testapplication
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import androidx.appcompat.app.AppCompatActivity
+import com.navinfo.testapplication.databinding.ActivityCoroutineBinding
+
+class RxCoroutineActivity: AppCompatActivity() {
+    private val binding by lazy {
+        ActivityCoroutineBinding.inflate(LayoutInflater.from(this));
+    }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(binding.root)
+
+        // 最简单的协程测试
+        binding.coroutineSimple1.setOnClickListener {
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_coroutine.xml b/app/src/main/res/layout/activity_coroutine.xml
new file mode 100644
index 0000000..8f08c25
--- /dev/null
+++ b/app/src/main/res/layout/activity_coroutine.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_centerInParent="true"
+        android:orientation="vertical">
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/coroutine_simple_1"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="最简单的协程">
+        </com.google.android.material.button.MaterialButton>
+    </LinearLayout>
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index fc06d0b..619bac5 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -5,24 +5,24 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical"
-    tools:context=".MainActivity">
+    tools:context="com.navinfo.MainActivity">
     <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:orientation="vertical"
         android:layout_centerInParent="true">
-        <androidx.appcompat.widget.AppCompatButton
-            android:id="@+id/btn_rxjava1"
+        <Button
+            android:id="@+id/btn_start_rxjava"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             style="@style/Widget.AppCompat.Button.Colored"
-            android:text="最简单的RxJava示例"></androidx.appcompat.widget.AppCompatButton>
+            android:text="RxJava测试界面"></Button>
 
         <Button
             android:id="@+id/btn_start_coroutine"
-            android:layout_width="wrap_content"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_centerInParent="true"
-            android:text="启动协程"></Button>
+            style="@style/Widget.AppCompat.Button.Colored"
+            android:text="协程测试界面"></Button>
     </LinearLayout>
 </RelativeLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_rxandroid.xml b/app/src/main/res/layout/activity_rxandroid.xml
index 03fc168..ffed7c6 100644
--- a/app/src/main/res/layout/activity_rxandroid.xml
+++ b/app/src/main/res/layout/activity_rxandroid.xml
@@ -37,5 +37,11 @@
             android:layout_height="wrap_content"
             android:text="背压">
         </com.google.android.material.button.MaterialButton>
+        <com.google.android.material.button.MaterialButton
+            android:id="@+id/rx_simple_6"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="取消流程">
+        </com.google.android.material.button.MaterialButton>
     </LinearLayout>
 </RelativeLayout>
\ No newline at end of file