当前位置: 移动技术网 > IT编程>移动开发>Android > Android异步更新UI的四种方式

Android异步更新UI的四种方式

2019年07月24日  | 移动技术网IT编程  | 我要评论

智能家居加盟费,延边朝鲜族,authorware课件模板

大家都知道由于性能要求,android要求只能在ui线程中更新ui,要想在其他线程中更新ui,大致有4种方式,下面分别使用四种方式来更新一个textview。
1.使用handler消息传递机制

package com.example.runonuithreadtest;
import android.app.activity;
import android.os.bundle;
import android.os.handler;
import android.widget.textview;
public class mainactivity extends activity {
 private textview tv;
 handler handler = new handler()
 {
 public void handlemessage(android.os.message msg) {
  if(msg.what==0x123)
  {
  tv.settext("更新后的textview");
  }
 };
 };
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_main);
 tv = (textview) findviewbyid(r.id.tv);
 new mythread().start();
 }
 class mythread extends thread
 {
 @override
 public void run() {
  //延迟两秒更新
  try {
  thread.sleep(2000);
  } catch (interruptedexception e) {
  // todo auto-generated catch block
  e.printstacktrace();
  }
  handler.sendemptymessage(0x123);
 }
 }
}

2. 使用asynctask异步任务(更新ui的操作只能在onpostexecute(string result)方法中)

package com.example.runonuithreadtest;
import android.app.activity;
import android.os.asynctask;
import android.os.bundle;
import android.widget.textview;
public class mainactivity extends activity {
 private textview tv;
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_main);
 tv = (textview) findviewbyid(r.id.tv);
 new yibu().execute();
 }
 class yibu extends asynctask<string, string, string>
 {
 @override
 protected string doinbackground(string... params) {
  try {
  thread.sleep(2000);
  } catch (interruptedexception e) {
  // todo auto-generated catch block
  e.printstacktrace();
  }
  return null;
 }
 @override
 protected void onpostexecute(string result) {
  // todo auto-generated method stub
  tv.settext("更新后的textview");
 }
 }
}

3. 使用runonuithread(action)方法

package com.example.runonuithreadtest;
import android.app.activity;
import android.os.bundle;
import android.widget.textview;
public class mainactivity extends activity {
 private textview tv;
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_main);
 tv = (textview) findviewbyid(r.id.tv);
 new mythread().start();
 }
 class mythread extends thread
 {
 @override
 public void run() {
  runonuithread(new runnable() {
  @override
  public void run() {
   // todo auto-generated method stub
   try {
    //延迟两秒更新
    thread.sleep(2000);
   } catch (interruptedexception e) {
    e.printstacktrace();
   }
   tv.settext("更新后的textview");
  }
  });
 }
 }
}

4. 使用handler的post(runnabel r)方法

package com.example.runonuithreadtest;
import android.app.activity;
import android.os.bundle;
import android.os.handler;
import android.widget.textview;
public class mainactivity extends activity {
 private textview tv;
 @override
 protected void oncreate(bundle savedinstancestate) {
 super.oncreate(savedinstancestate);
 setcontentview(r.layout.activity_main);
 tv = (textview) findviewbyid(r.id.tv);
 handler handler = new handler();
 handler.post(new runnable(){
  @override
  public void run() {
  try {
   //延迟两秒更新
   thread.sleep(2000);
  } catch (interruptedexception e) {
   e.printstacktrace();
  }
  tv.settext("更新后的textview");
  }
 });
 }
}

以上就是四种android异步更新ui的方式,希望对大家的学习有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网