跳转至

使用 Kotlin 在安卓中运行用户界面线程

原文:https://www . geesforgeks . org/running-user-interface-thread-in-Android-using-kot Lin/

Android 中的用户界面线程或 UI-Thread 是负责隐式或显式更新应用程序布局元素的线程元素。这意味着,要在应用程序布局(即应用程序前端)中更新元素或更改其属性,可以使用用户界面线程。

实现 UI Thread: 比如一个线程动作启动,开发者想针对线程元素更新前端元素,可以使用runnonithread {…}功能。 下面是使用 UI 线程的应用示例。

示例应用,其中文本视图中的文本每秒都在更改

最初,应用程序将显示一条欢迎消息,一旦点击开始按钮,它将每秒交替显示 2 条消息,“爱 gfg”和“不爱 gfg”。

进场: 第一步:activity_main.xml 中添加以下代码。在这里,添加一个文本视图和一个按钮到我们的主活动布局。

超文本标记语言

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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/tv1"
        android:layout_width="210sp"
        android:layout_height="100sp"
        android:layout_centerInParent="true"
        android:gravity="center"
        android:textSize="50sp"
        android:text="Welcome"
        />

    <Button
        android:id="@+id/btnStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start"
        android:layout_below="@id/tv1"
        android:layout_centerHorizontal="true"
        />

</RelativeLayout>

第二步:在 MainActivity 中添加下面的代码。这里 OnClickListener 是用按钮添加的。所以每当用户点击按钮时就会调用它。在侦听器中,在主线程中创建了一个无限循环,使用用户界面线程,文本每秒钟都在改变。

Java 语言(一种计算机语言,尤用于创建网站)

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Assigning Layout elements
        val tv = findViewById<TextView>(R.id.tv1)
        val btn = findViewById<Button>(R.id.btnStart)
        val msg1 = "love gfg" val msg2 = "not gfg"

        // Button onClick action
        btn.setOnClickListener
        {
            // Declaring Main Thread
            Thread(Runnable {
                while (true) {
                    // Updating Text View at current
                    // iteration
                    runOnUiThread{ tv.text = msg1 }

                    // Thread sleep for 1 sec
                    Thread.sleep(1000)
                    // Updating Text View at current
                    // iteration
                    runOnUiThread{ tv.text = msg2 }

                    // Thread sleep for 1 sec
                    Thread.sleep(1000)
                }
            }).start()
        }
    }
}

注意:While 循环只能在线程内部声明。如果在 while 循环中声明了一个 Thread,程序将无法工作并崩溃。

示例定时器 App 从以上代码的基本概念,可以设计出一款定时器 App。下面是相同的代码:

进场: 第一步:在 MainActivity 布局中添加以下代码。这里添加了按钮、edittext 和 textview。按钮用于启动计时器,edittext 用于接收用户输入,textview 用于显示剩余时间。

可扩展标记语言

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">

    <Button
        android:id="@+id/btnStart"
        android:layout_width="100sp"
        android:layout_height="50sp"
        android:layout_centerInParent="true"
        android:text="Start"
        />

    <EditText
        android:id="@+id/et1"
        android:layout_width="100sp"
        android:layout_height="100sp"
        android:layout_centerHorizontal="true"
        android:layout_above="@id/btnStart"
        android:textSize="50sp"
        android:inputType="number"
        android:gravity="center"
        android:background="@color/colorPrimary"
        android:textColor="@color/colorAccent"
        />

    <TextView
        android:id="@+id/tv1"
        android:layout_width="100sp"
        android:layout_height="100sp"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/btnStart"
        android:gravity="center"
        android:textSize="50sp"
        android:background="@color/colorPrimaryDark"
        android:textColor="@color/colorAccent"
        />

</RelativeLayout>

第二步:在 MainActivity 类中添加下面的代码。这里我们用按钮添加 onClickListener 。点击按钮时,运行无信息读取功能显示剩余时间。

Java 语言(一种计算机语言,尤用于创建网站)

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Assigning Layout elements
        val et = findViewById<EditText>(R.id.et1)
        val btn = findViewById<Button>(R.id.btnStart)
        val tv = findViewById<TextView>(R.id.tv1)

              // Button onClick action
        btn.setOnClickListener{
            // Converting Edit Text input to String
            val stringTime= (et.text).toString()
            // Converting stringTime to Integer
            val intTime= Integer.parseInt(stringTime)
            // Declaring Main Thread
             Thread(Runnable {
                  // For loop Decrement
                  for (i in intTime downTo 0) {
                       // Updating Text View at
                       // current iteration
                        runOnUiThread{
                            tv.text = i.toString()
                         }

                   // Thread sleep for 1 sec
                        Thread.sleep(1000)
                          }
                      }).start()
        }
    }
}


回到顶部