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

Android中invalidate()和postInvalidate() 的區(qū)別及使用方法

 更新時間:2016年05月03日 15:42:12   作者:小破孩123  
Android中實現(xiàn)view的更新有兩組方法,一組是invalidate,另一組是postInvalidate,其中前者是在UI線程自身中使用,而后者在非UI線程中使用。本文給大家介紹Android中invalidate()和postInvalidate() 的區(qū)別及使用方法,感興趣的朋友一起學(xué)習(xí)吧

Android中實現(xiàn)view的更新有兩組方法,一組是invalidate,另一組是postInvalidate,其中前者是在UI線程自身中使用,而后者在非UI線程中使用。

      Android提供了Invalidate方法實現(xiàn)界面刷新,但是Invalidate不能直接在線程中調(diào)用,因為他是違背了單線程模型:Android UI操作并不是線程安全的,并且這些操作必須在UI線程中調(diào)用。

  invalidate()是用來刷新View的,必須是在UI線程中進(jìn)行工作。比如在修改某個view的顯示時,調(diào)用invalidate()才能看到重新繪制的界面。invalidate()的調(diào)用是把之前的舊的view從主UI線程隊列中pop掉。 一個Android 程序默認(rèn)情況下也只有一個進(jìn)程,但一個進(jìn)程下卻可以有許多個線程。

  在這么多線程當(dāng)中,把主要是負(fù)責(zé)控制UI界面的顯示、更新和控件交互的線程稱為UI線程,由于onCreate()方法是由UI線程執(zhí)行的,所以也可以把UI線程理解為主線程。其余的線程可以理解為工作者線程。

  invalidate()得在UI線程中被調(diào)動,在工作者線程中可以通過Handler來通知UI線程進(jìn)行界面更新;而postInvalidate()在工作者線程中被調(diào)用。

利用invalidate()刷新界面

  實例化一個Handler對象,并重寫handleMessage方法調(diào)用invalidate()實現(xiàn)界面刷新;而在線程中通過sendMessage發(fā)送界面更新消息。

// 在onCreate()中開啟線程 
new Thread( new GameThread()).start();、 
// 實例化一個handler 
Handler myHandler = new Handler() { 
// 接收到消息后處理 
public void handleMessage(Message msg) { 
switch (msg.what) { 
case Activity01.REFRESH: 
mGameView.invalidate(); // 刷新界面 
break ; 
} 
super .handleMessage(msg); 
} 
}; 
class GameThread implements Runnable { 
public void run() { 
while (!Thread.currentThread().isInterrupted()) { 
Message message = new Message(); 
message.what = Activity01.REFRESH; 
// 發(fā)送消息 
Activity01.this .myHandler.sendMessage(message); 
try { 
Thread.sleep(100 ); 
} catch (InterruptedException e) { 
Thread.currentThread().interrupt(); 
} 
} 
} 
} 
// 在onCreate()中開啟線程
new Thread(new GameThread()).start();、
// 實例化一個handler
Handler myHandler = new Handler() {
// 接收到消息后處理
public void handleMessage(Message msg) {
switch (msg.what) {
case Activity01.REFRESH:
mGameView.invalidate(); // 刷新界面
break;
}
super.handleMessage(msg);
}
};
class GameThread implements Runnable {
public void run() {
while (!Thread.currentThread().isInterrupted()) {
Message message = new Message();
message.what = Activity01.REFRESH;
// 發(fā)送消息
Activity01.this.myHandler.sendMessage(message);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}

使用postInvalidate()刷新界面

  使用postInvalidate則比較簡單,不需要handler,直接在線程中調(diào)用postInvalidate即可。

class GameThread implements Runnable { 
public void run() { 
while (!Thread.currentThread().isInterrupted()) { 
try { 
Thread.sleep(100 ); 
} catch (InterruptedException e) { 
Thread.currentThread().interrupt(); 
} 
// 使用postInvalidate可以直接在線程中更新界面 
mGameView.postInvalidate(); 
} 
} 
}

以上所述是小編給大家分享的Android中invalidate()和postInvalidate() 的區(qū)別及使用方法,希望對大家有所幫助!

相關(guān)文章

  • 解析Android框架之Volley源碼

    解析Android框架之Volley源碼

    我們知道Volley是在2013年Google I/O大會上推出了一個新的網(wǎng)絡(luò)通信框架,他的設(shè)計目的就是為了那些請求數(shù)據(jù)量不是特別大,但是又是特別頻繁的網(wǎng)絡(luò)操作非常適合。但是對于數(shù)據(jù)量較大的請求,比如說下載一個較大的文件,Volley可能相比于其他的框架,就有點(diǎn)不足了。
    2021-06-06
  • Android 按指定大小讀取圖片的實例

    Android 按指定大小讀取圖片的實例

    本文主要介紹Android 按指定大小讀取圖片,在Android開發(fā)過程中經(jīng)常會遇到圖片超過屏幕,或者圖片過小問題,這里給一個實例解決讀取圖片大小的問題,希望能幫助有需要的小伙伴
    2016-07-07
  • Android中Activity的生命周期探討

    Android中Activity的生命周期探討

    這篇文章主要介紹了Android中Activity的生命周期探討,本文同時講解了銷毀Activity、暫停與恢復(fù)、停止與重啟Activity等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Android中判斷屏幕是否亮屏和是否解鎖功能

    Android中判斷屏幕是否亮屏和是否解鎖功能

    這篇文章主要介紹了Android中判斷屏幕是否亮屏和是否解鎖功能,需要的朋友可以參考下
    2017-02-02
  • Android StickListView實現(xiàn)懸停效果

    Android StickListView實現(xiàn)懸停效果

    這篇文章主要介紹了Android StickListView實現(xiàn)懸停效果的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • android開發(fā)教程之實現(xiàn)滑動關(guān)閉fragment示例

    android開發(fā)教程之實現(xiàn)滑動關(guān)閉fragment示例

    這篇文章主要介紹了android實現(xiàn)滑動關(guān)閉fragment示例,需要的朋友可以參考下
    2014-03-03
  • Android開發(fā)之ContentProvider的使用詳解

    Android開發(fā)之ContentProvider的使用詳解

    本篇文章介紹了Android開發(fā)之ContentProvider的使用詳解。需要的朋友參考下
    2013-04-04
  • Android開發(fā)之ImageLoader使用詳解

    Android開發(fā)之ImageLoader使用詳解

    這篇文章主要介紹了Android開發(fā)之ImageLoader使用詳解的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • Android開發(fā)之日歷CalendarView用法示例

    Android開發(fā)之日歷CalendarView用法示例

    這篇文章主要介紹了Android開發(fā)之日歷CalendarView用法,簡單分析了日歷CalendarView組件的功能、屬性設(shè)置方法、界面布局、事件監(jiān)聽等相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • Android自定義控件的步驟

    Android自定義控件的步驟

    今天小編就為大家分享一篇關(guān)于Android自定義控件的步驟,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評論

万年县| 康平县| 东城区| 黎川县| 太仓市| 江门市| 和田县| 哈尔滨市| 宝鸡市| 潼关县| 岚皋县| 东安县| 育儿| 秦皇岛市| 天等县| 元阳县| 循化| 谢通门县| 长治市| 额尔古纳市| 鄱阳县| 广饶县| 攀枝花市| 曲沃县| 磴口县| 长子县| 顺义区| 德钦县| 五莲县| 丹阳市| 中卫市| 新田县| 湘潭县| 和硕县| 光山县| 乌拉特后旗| 新沂市| 勐海县| 博野县| 桐城市| 四川省|