UWP与Android中如何在多线程中刷新UI
16lz
2021-01-23
UWP与Android中如何在多线程中刷新UI
无论我们是在进行UWP开发亦或是Android开发,都会在程序运行的同时产生一个UI线程,这是管理你界面的线程,而这也导致你在子线程中越界修改界面时将会报错。本文将对UWP以及Android更改UI的方式进行讨论。
UWP
现在先假设我们拥有一个子线程thread1,其要去更改Mainpage中的一名为TextBox1的控件内的文字(在此例中System.Threading.Tasks.Task和System.Threading.Thread等价)
thread的定义为
private void thread(){/*do_something();*/TexBox.Text="Hello World!";}
显然这样会报错,所以我们得采用通知UI线程进行更改的方式,其分为两步:
1.添加Invoke函数
2.将更改UI的action传入Invoke函数中
我们首先进行第一步
public async void Invoke(Action action, Windows.UI.Core.CoreDispatcherPriority Priority = Windows.UI.Core.CoreDispatcherPriority.Normal){await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Priority, () => { action(); });}
这就是个模板函数,直接copy就行了,其作用为将传入的action通知UI线程
然后更改thread函数,重写当中关于更改UI的部分,将此action传入Invoke函数中
private void thread(){/*do_something();*/Invoke(() => { TexBox.Text="Hello World!"; });}
Android
在Android中更改UI是可以分成情况的,在非多线程的情况下我们可以直接通过Adapter的notifyDataSetChanged()刷新,而另外一种则可以用到 handler
使用handler同样分为两步
一是更改在你的page类中创建一个handler
二是在thread中传递message给hundler提示刷新
此处假设为更改一个listView并且其适配器为chatAdapter
public class MainActivity extends AppCompatActivity{ //创建handler对象 private Handler handler = new Handler() { public void handleMessage(Message msg) { int what = msg.what; switch(what) { case 0: //提示Adapter刷新界面 chatAdapter.notifyDataSetChanged(); default: } } protected void onCreate(Bundle savedInstanceState) { /* do_something() */ }}
注意在上面handler的定义中我们对于传入0的情况进行了定义,即当传入0时将会刷新UI
然后在thread中
class thread extends Thread{ public void run(){ /* do_something(); */ //此时应已经做完更改值的操作,接下来为传递message更改UI Message message=Message.obtain(); message.what=0; handler.sendMessage(message); } }
更多相关文章
- Android中微信主界面菜单栏的布局实现代码
- Android Studio如何提示函数用法
- Android下实现非启动界面Wifi连接
- android google 分屏 多窗口 按home键界面错乱故障分析(一)分屏的
- Android移动应用界面的模板化设计
- Android 4.0 ICS 用户界面概述
- Android移动应用界面的模板化设计【自定义BaseActivity】
- 从零开始--系统深入学习android(实践-让我们开始写代码-Android框
- Android和iPhone应用程序界面布局示例