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 @@ + + + + + + \ 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 @@ @@ -23,6 +23,14 @@ + + + + \ 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{ - 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 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() { @Override public void subscribe(FlowableEmitter 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() { @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 @@ + + + + + + + \ 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"> - + android:text="RxJava测试界面"> + style="@style/Widget.AppCompat.Button.Colored" + android:text="协程测试界面"> \ 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="背压"> + + \ No newline at end of file