Есть активность с тремя виджетами: текст, кнопка и чек бокс
Если к кнопке привязать создание нового потока через Thread и через AsyncTask, то при повторном нажатии на кнопку Thread создаст параллельно еще второй поток, в то время как AsyncTask создаст новый поток только после исполнения первого. Почему AsyncTask не добавляет сразу же новый поток параллельно с первым, как это делает Thread, ведь в AsyncTask под капотом же тот же Thread?
Макет:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btn"
android:text="button"/>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
tools:ignore="MissingConstraints" />
</LinearLayout>
Код:
package ru.examp.constraintlayoutpracticeapplication;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
Button btn;
int i = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyAsync my = new MyAsync();
my.execute();
Myt m = new Myt();
m.start();
}
});
}
class Myt extends Thread{
public void run(){
for (int i = 10; i < 20; i++){
try {
Log.d("Thread1", "" + i);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class MyAsync extends AsyncTask {
@Override
protected Object doInBackground(Object[] objects) {
for (int i = 0; i < 10; i++){
try {
Log.d("Thread2", "" + i);
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
}
}
Вывод:
2022-08-08 15:37:27.543 8374-8419/ D/Thread2: 0 # начало потока через AsyncTask
2022-08-08 15:37:27.544 8374-8420/ D/Thread1: 10 # начало потока через Thread
2022-08-08 15:37:28.547 8374-8420/ D/Thread1: 11
2022-08-08 15:37:28.550 8374-8419/ D/Thread2: 1
2022-08-08 15:37:29.549 8374-8420/ D/Thread1: 12
2022-08-08 15:37:29.554 8374-8419/ D/Thread2: 2
2022-08-08 15:37:30.329 8374-8421/ D/Thread1: 10 # начало второго параллельного потока через Thread
2022-08-08 15:37:30.553 8374-8420/ D/Thread1: 13
2022-08-08 15:37:30.561 8374-8419/ D/Thread2: 3
2022-08-08 15:37:31.333 8374-8421/ D/Thread1: 11
2022-08-08 15:37:31.557 8374-8420/ D/Thread1: 14
2022-08-08 15:37:31.576 8374-8419/ D/Thread2: 4
2022-08-08 15:37:32.337 8374-8421/ D/Thread1: 12
2022-08-08 15:37:32.561 8374-8420/ D/Thread1: 15
2022-08-08 15:37:32.580 8374-8419/ D/Thread2: 5
2022-08-08 15:37:33.340 8374-8421/ D/Thread1: 13
2022-08-08 15:37:33.563 8374-8420/ D/Thread1: 16
2022-08-08 15:37:33.635 8374-8419/ D/Thread2: 6
2022-08-08 15:37:34.030 8374-8422/ D/Thread1: 10 # начало третьего параллельного потока через Thread
2022-08-08 15:37:34.343 8374-8421/ D/Thread1: 14
2022-08-08 15:37:34.570 8374-8420/ D/Thread1: 17
2022-08-08 15:37:34.698 8374-8419/ D/Thread2: 7
2022-08-08 15:37:35.035 8374-8422/ D/Thread1: 11
2022-08-08 15:37:35.347 8374-8421/ D/Thread1: 15
2022-08-08 15:37:35.573 8374-8420/ D/Thread1: 18
2022-08-08 15:37:35.708 8374-8419/ D/Thread2: 8
2022-08-08 15:37:36.040 8374-8422/ D/Thread1: 12
2022-08-08 15:37:36.353 8374-8421/ D/Thread1: 16
2022-08-08 15:37:36.594 8374-8420/ D/Thread1: 19
2022-08-08 15:37:36.726 8374-8419/ D/Thread2: 9
2022-08-08 15:37:37.045 8374-8422/ D/Thread1: 13
2022-08-08 15:37:37.393 8374-8421/ D/Thread1: 17
2022-08-08 15:37:37.775 8374-8424/ D/Thread2: 0 # начало следующего потока через AsyncTask, первый поток завершился
2022-08-08 15:37:38.052 8374-8422/ D/Thread1: 14
2022-08-08 15:37:38.425 8374-8421/ D/Thread1: 18
2022-08-08 15:37:38.845 8374-8424/ D/Thread2: 1
2022-08-08 15:37:39.068 8374-8422/ D/Thread1: 15
2022-08-08 15:37:39.497 8374-8421/ D/Thread1: 19
2022-08-08 15:37:39.914 8374-8424/ D/Thread2: 2
2022-08-08 15:37:40.082 8374-8422/ D/Thread1: 16
2022-08-08 15:37:40.973 8374-8424/ D/Thread2: 3
2022-08-08 15:37:41.100 8374-8422/ D/Thread1: 17