最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android UI更新的幾種方法總結(jié)

 更新時間:2016年11月17日 14:31:00   投稿:lqh  
這篇文章主要介紹了Android UI更新的幾種方法總結(jié)的相關(guān)資料,這里對Android UI 的幾種更新列出了,并附實例代碼,需要的朋友可以參考下

 Android UI更新

做過Android開發(fā)的人都遇到過這樣的問題:隨著需求的變化,某些入口界面會出現(xiàn)UI的增減、內(nèi)容變化和跳轉(zhuǎn)界面變化等問題,這里就說明幾種方法來實現(xiàn) UI的更新。

1、Activity的 runOnUiThread  

textView = (TextView) findViewById( R.id.tv );
    new Thread(new Runnable() {
      @Override
      public void run() {
 
        runOnUiThread(new Runnable() {
          @Override
          public void run() {
            textView.setText( "更新UI了");
          }
        });
      }
    }).start();

android Activity runOnUiThread() 方法使用 

2、Handler sendEmptyMessage()

package lib.com.myapplication;
 
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity {
 
  private TextView textView ;
 
  Handler handler = new Handler( ) {
    @Override
    public void handleMessage(Message msg) {
      super.handleMessage(msg);
      textView.setText( "Ui更新了");
    }
  };
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    textView = (TextView) findViewById( R.id.tv );
    new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          Thread.sleep( 2000 );
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
 
        handler.sendEmptyMessage( 2 ) ;
      }
    }).start();
 
  }
}

3、Handler  post()

package lib.com.myapplication;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity {
 
  private TextView textView ;
 
  Handler handler = new Handler();
 
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
 
    textView = (TextView) findViewById( R.id.tv );
 
    new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          Thread.sleep( 2000 );
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
 
        handler.post(new Runnable() {
          @Override
          public void run() {
            textView.setText( "Ui更新了");
          }
        }) ;
      }
    }).start();
 
  }
}

在子線程中切換到主線程

new Thread(new Runnable() {
  @Override
  public void run() {
    LogUtil.d( "ttt 11111111111" + Thread.currentThread().getName() );
    new Handler(Looper.getMainLooper()).post(new Runnable() {
      @Override
      public void run() {
        LogUtil.d( "ttt 55555555" + Thread.currentThread().getName() );
      }
    });
 
    LogUtil.d( "ttt 22222222222" + Thread.currentThread().getName() );
    LogUtil.d( "ttt 33333333333" + Thread.currentThread().getName() );
    LogUtil.d( "ttt 44444444444" + Thread.currentThread().getName() );
 
  }
}).start();

  結(jié)果


ttt 11111111111Thread-155
ttt 22222222222Thread-155
ttt 33333333333Thread-155
ttt 44444444444Thread-155
ttt 55555555main

  可見這種方式可以快速切換線程,從log日志來看,切換到主線程不會阻塞子線程。

4、view Post() 

textView = (TextView) findViewById( R.id.tv );
    new Thread(new Runnable() {
      @Override
      public void run() {
        try {
          Thread.sleep( 2000 );
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
 
        textView.post(new Runnable() {
          @Override
          public void run() {
            textView.setText( "Ui更新了");
          }
        }) ;
      }
    }).start();

總結(jié):

1、其實上面的四種方式都可歸結(jié)于一種方式:handler 用于Android線程之間的通信。

2、為什么android要求只能在UI線程進(jìn)行UI操作? 主要還是為了避免多線程造成的并發(fā)的問題。在單線程操作UI是安全的。

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Android垃圾回收機(jī)制及程序優(yōu)化System.gc

    Android垃圾回收機(jī)制及程序優(yōu)化System.gc

    這篇文章主要介紹了Android垃圾回收機(jī)制及程序優(yōu)化System.gc的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Android實現(xiàn)淘寶選中商品尺寸的按鈕組實例

    Android實現(xiàn)淘寶選中商品尺寸的按鈕組實例

    這篇文章介紹的是仿淘寶中的選中商品不同尺寸,比如衣服有L、M、XL等等的款式。這時候我們就需要一個button組來進(jìn)行了,當(dāng)時這個時候里面的尺寸可能有很多,那怎么辦呢?這里我們就肯定要做個自適應(yīng)的按鈕組了,要不然弄出來也沒用。
    2016-08-08
  • android實現(xiàn)通話自動錄音服務(wù)

    android實現(xiàn)通話自動錄音服務(wù)

    這篇文章主要為大家詳細(xì)介紹了android實現(xiàn)通話自動錄音服務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • android源碼探索之定制android關(guān)機(jī)界面的方法

    android源碼探索之定制android關(guān)機(jī)界面的方法

    這篇文章主要介紹了android源碼探索之定制android關(guān)機(jī)界面的方法,較為詳細(xì)的分析了Android關(guān)機(jī)界面的相關(guān)原理與代碼實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • Android TextView實現(xiàn)多文本折疊、展開效果

    Android TextView實現(xiàn)多文本折疊、展開效果

    這篇文章主要為大家詳細(xì)介紹了Android TextView實現(xiàn)多文本折疊、展開效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Android事件分發(fā)機(jī)制全面解析

    Android事件分發(fā)機(jī)制全面解析

    這篇文章主要介紹了Android事件分發(fā)機(jī)制全面解析,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下
    2021-03-03
  • Android開發(fā)之Wifi基礎(chǔ)教程

    Android開發(fā)之Wifi基礎(chǔ)教程

    這篇文章主要介紹了Android開發(fā)Wifi基礎(chǔ)教程,實例分析了Wifi的各種常見基本技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Android自定義view實現(xiàn)雪花特效實例代碼

    Android自定義view實現(xiàn)雪花特效實例代碼

    實現(xiàn)雪花的效果其實也可以通過自定義View的方式來實現(xiàn)的,而且操作上也相對簡單一些,下面這篇文章主要給大家介紹了關(guān)于Android自定義view實現(xiàn)雪花特效的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Kotlin server多線程編程詳細(xì)講解

    Kotlin server多線程編程詳細(xì)講解

    這篇文章主要介紹了Kotlin server多線程編程,Service是實現(xiàn)程序后臺運(yùn)行的解決方案,適合執(zhí)行非交互,后臺預(yù)先的任務(wù),即使用戶打開其他應(yīng)用,Service也能夠正常運(yùn)行
    2023-01-01
  • Android自定義Material進(jìn)度條效果

    Android自定義Material進(jìn)度條效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義Material進(jìn)度條效果的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評論

武功县| 博白县| 大足县| 青州市| 海宁市| 东方市| 横山县| 吉木萨尔县| 修武县| 景宁| 江阴市| 铜梁县| 镇康县| 滁州市| 富顺县| 同江市| 商丘市| 融水| 黄龙县| 镇康县| 哈巴河县| 长寿区| 江山市| 景谷| 和政县| 会同县| 彭山县| 海城市| 嘉祥县| 四子王旗| 从江县| 扶沟县| 唐海县| 大厂| 光泽县| 香河县| 淮滨县| 蓬溪县| 育儿| 泗阳县| 青田县|