欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

Android开发:操作UI线程4种方法

发布时间:2025/3/15 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Android开发:操作UI线程4种方法 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

我们经常会在后台线程中去做一些耗时的操作,比如去网络取数据。但是当数据取回来,需要显示到页面上的时候,会遇到一些小麻烦,因为我们都知道,android的UI页面是不允许在其他线程直接操作的。下面总结4中方法用来在线程中操作UI界面。

模拟耗时操作

private void connectNet() throws InterruptedException {Thread.sleep(2000); }

方法一:Handler

子线程中通过Handler的sendMessage(msg)发送事件:

private void method1() {new Thread(new Runnable() {@Overridepublic void run() {try {//耗时操作connectNet();//向Handler发送消息mHadndler.sendEmptyMessage(111);} catch (InterruptedException e) {e.printStackTrace();}}}).start(); }

方法二:View.post(Runnable)

private void method2() {myText.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(new Runnable() {@Overridepublic void run() {try {//耗时操作connectNet();myText.post(new Runnable() {@Overridepublic void run() {myText.setText("联网结束,更新UI数据");}});} catch (InterruptedException e) {e.printStackTrace();}}}).start();}}); }

方法三:Activity.runOnUiThread

与view.post类似

private void method3() {new Thread(new Runnable() {@Overridepublic void run() {try {//耗时操作connectNet();runOnUiThread(new Runnable() {@Overridepublic void run() {myText.setText("runOnUiThread...");}});} catch (InterruptedException e) {e.printStackTrace();}}}).start(); }

方法四:AsyncTask

private void method4() {//UI线程中执行new LoadTask().execute("www.91dota.com"); } private class LoadTask extends AsyncTask {protected void onPostExecute(String result) {myText.setText(result); //得到来自网络的信息刷新页面}protected String doInBackground(Object[] objects) {return "......";//后台耗时操作} }

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

示例:

附上代码和布局

MainActivity.java

public class MainActivity extends AppCompatActivity {private TextView myText;private Handler mHadndler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);myText.setText("收到消息啦..." + msg.what);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myText = findViewById(R.id.myTextView);}/*** 方法一:Handler*/private void method1() {new Thread(new Runnable() {@Overridepublic void run() {try {//耗时操作connectNet();//向Handler发送消息mHadndler.sendEmptyMessage(111);} catch (InterruptedException e) {e.printStackTrace();}}}).start();}/*** 方法二:通过View.post(Runnable)*/private void method2() {myText.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {new Thread(new Runnable() {@Overridepublic void run() {try {//耗时操作connectNet();myText.post(new Runnable() {@Overridepublic void run() {myText.setText("联网结束,更新UI数据");}});} catch (InterruptedException e) {e.printStackTrace();}}}).start();}});}/*** 方法三:Activity.runOnUiThread(Runnable )*/private void method3() {runOnUiThread(new Runnable() {@Overridepublic void run() {try {//耗时操作connectNet();myText.setText("runOnUiThread...");} catch (InterruptedException e) {e.printStackTrace();}}});}/*** 方法四:AsyncTask*/private void method4() {//UI线程中执行new LoadTask().execute("www.91dota.com");}private class LoadTask extends AsyncTask {protected void onPostExecute(String result) {myText.setText(result); //得到来自网络的信息刷新页面}protected String doInBackground(Object[] objects) {return "......";//后台耗时操作}}private void connectNet() throws InterruptedException {Thread.sleep(2000);} }

activity_main.xml

<?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"android:orientation="vertical"><TextViewandroid:id="@+id/myTextView"android:layout_width="match_parent"android:layout_height="50dp"android:layout_margin="10dp"android:background="#dea"android:gravity="center"android:text="Hello World!" /></LinearLayout>

 

总结

以上是生活随笔为你收集整理的Android开发:操作UI线程4种方法的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。