📅  最后修改于: 2021-08-25 18:39:11             🧑  作者: Mango
同时处理 多个任务是“多任务处理” 。以同样的方式,在一台计算机中同时运行的多个线程称为“多线程” 。从技术上讲,线程是进程的单元。多个这样的线程组合形成一个进程。这意味着当一个进程中断时,等效数量的线程可用。例如 ,“自动更正” 是指软件在键入的当前单词中查找错误的过程。无休止地检查错误并同时提供建议是多线程过程的一个示例。
示例Android应用:
让我们尝试在Android应用程序的帮助下可视化多线程。在下面的示例中,单击按钮时同时启动3个线程并同时工作。
方法: 步骤1: 在activity_main.xml中 添加以下代码。在这里,我们添加了三个TextViews和一个按钮。
XML
Java
class MainActivity : AppCompatActivity() {
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Assigning Layout elements
val tv1
= findViewById(R.id.tv1)
val tv2
= findViewById(R.id.tv2)
val tv3
= findViewById(R.id.tv3)
val btn
= findViewById(R.id.btnStart)
// Boolean for Button (initially False)
var boolbtn
= false
// Button onClick action
btn.setOnClickListener
{
// Button (True)
boolbtn = !boolbtn
// Case where Button is False
if (!boolbtn)
{
tv1.text = "Stopped1"
tv2.text = "Stopped2"
tv3.text = "Stopped3"
btn.text = "Start"
}
// Case where Threads are running
else
{
// Setting the button text as "Stop"
btn.text = "Stop"
// Thread 1
Thread(Runnable {
// Runs only when Button is True
while (boolbtn) {
runOnUiThread
{
tv1.text = "Started1"
}
Thread.sleep(1000)
runOnUiThread
{
tv1.text = "Activity1"
}
Thread.sleep(1000)
}
}).start()
// Thread 2
Thread(Runnable {
// Runs only when Button is
// True
while (boolbtn) {
runOnUiThread
{
tv2.text = "Started2"
}
Thread.sleep(1000)
runOnUiThread
{
tv2.text = "Activity2"
}
Thread.sleep(1000)
}
}).start()
// Thread 3
Thread(Runnable {
// Runs only when Button is
// True
while (boolbtn) {
runOnUiThread
{
tv3.text = "Started3"
}
Thread.sleep(1000)
runOnUiThread
{
tv3.text = "Activity3"
}
Thread.sleep(1000)
}
})
.start()
}
}
}
}
步骤2: 在MainActivity中 添加以下代码。在这里,创建了三个线程,每个线程在单击按钮时都会每秒更新一次相应的TextView(在代码中声明)。这些线程将继续运行,直到再次单击该按钮(即“停止”)为止。
Java
class MainActivity : AppCompatActivity() {
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?)
{
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Assigning Layout elements
val tv1
= findViewById(R.id.tv1)
val tv2
= findViewById(R.id.tv2)
val tv3
= findViewById(R.id.tv3)
val btn
= findViewById(R.id.btnStart)
// Boolean for Button (initially False)
var boolbtn
= false
// Button onClick action
btn.setOnClickListener
{
// Button (True)
boolbtn = !boolbtn
// Case where Button is False
if (!boolbtn)
{
tv1.text = "Stopped1"
tv2.text = "Stopped2"
tv3.text = "Stopped3"
btn.text = "Start"
}
// Case where Threads are running
else
{
// Setting the button text as "Stop"
btn.text = "Stop"
// Thread 1
Thread(Runnable {
// Runs only when Button is True
while (boolbtn) {
runOnUiThread
{
tv1.text = "Started1"
}
Thread.sleep(1000)
runOnUiThread
{
tv1.text = "Activity1"
}
Thread.sleep(1000)
}
}).start()
// Thread 2
Thread(Runnable {
// Runs only when Button is
// True
while (boolbtn) {
runOnUiThread
{
tv2.text = "Started2"
}
Thread.sleep(1000)
runOnUiThread
{
tv2.text = "Activity2"
}
Thread.sleep(1000)
}
}).start()
// Thread 3
Thread(Runnable {
// Runs only when Button is
// True
while (boolbtn) {
runOnUiThread
{
tv3.text = "Started3"
}
Thread.sleep(1000)
runOnUiThread
{
tv3.text = "Activity3"
}
Thread.sleep(1000)
}
})
.start()
}
}
}
}
输出:
https://media.geeksforgeeks.org/wp-content/uploads/20200614222936/InShot_20200614_2111111061391.mp4
多线程概念适用于各种机器上的大量日常应用程序。然而,同样存在缺点。在初学者级别,人们只能想到机器上的负载或增加的复杂性。但是,从更高的角度来看,预计会出现多种情况,例如复杂的测试,不可预测的结果,死锁,饥饿等。
想要一个节奏更快,更具竞争性的环境来学习Android的基础知识吗?
单击此处 前往由我们的专家精心策划的指南,以使您立即做好行业准备!