Invalidate和postInvalidate

為什么80%的碼農都做不了架構師?>>> ??hot3.png

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

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

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

invalidate()得在UI線程中被調動,在工作者線程中可以通過Handler來通知UI線程進行界面更新。

而postInvalidate()在工作者線程中被調用

?

利用invalidate()刷新界面

  實例化一個Handler對象,并重寫handleMessage方法調用invalidate()實現界面刷新;而在線程中通過sendMessage發送界面更新消息。?
// 在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;
// 發送消息
Activity01.this.myHandler.sendMessage(message);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}


使用postInvalidate()刷新界面

使用postInvalidate則比較簡單,不需要handler,直接在線程中調用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();
}
}
}

轉載于:https://my.oschina.net/kun123/blog/968000

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/281736.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/281736.shtml
英文地址,請注明出處:http://en.pswp.cn/news/281736.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java比c好逆向,吐槽一下java的效率。。。比起C差的真的好遠。。。

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓刷計算機編程題目,USACO某道題,因為最近想用java,就寫了一個,各種查錯優化之后總算通過了:TASK: camelotLANG: JAVACompiling...Compile: OKExecuting...Test 1: TEST OK …

.Net輕松處理億級數據--clickhouse及可視化界面安裝介紹

前言我是在17年就聽說過Clickhouse,那時還未接觸過億數據的運算,那時我在的小公司對于千萬數據的解決方案還停留在分庫分表,最好的也是使用mycat做的集群。這些解決方案都比較復雜,畢竟通常來說那些需要大量存儲的數據基本都是像日志&#xf…

[USACO 4.2] 完美的牛欄

★★☆ 輸入文件:stall4.in 輸出文件:stall4.out 簡單對比 時間限制:1 s 內存限制:128 MB USACO/stall4(譯by Felicia Crazy)描述 農夫約翰上個星期剛剛建好了他的新牛棚,他使用了最新的擠奶技術。不幸的是&am…

003Java語言環境搭建

JRE,JDK JRE(Java Runtime Environment java運行環境):包括java虛擬機和java程序所需要的核心類庫, 如果要運行一個開發好的java程序,計算機中只需要安裝一個JRE JDK(Java Development Kit Java開發工具包) JDK是提供給…

php 編寫mysql,自己寫的MySQL類

自己寫的MySQL類---------- php debug ----------Serverlocalhost;DataBasemysql;UserIDroot;PassWord123456resource(5) of type (mysql result)Output completed (1 sec consumed) - Normal Terminationclass DBCLS{//debug 調試開關var $debug true;//debuginfo 錯誤信息&a…

NET CORE讀取Excel.xlsx單元格內的圖片,并關聯當前業務ID推送圖片到指定服務器...

NET CORE讀取Excel.xlsx單元格圖片的場景,一般是批量導入業務數據,例如:藥品的圖片,醫師資格證,商品上架、商家營業資質、水果信息、用戶頭像等等這里我截個圖,圖文并茂更好理解特別聲明:粘貼圖…

CSS或HTML如何實現文字下面加點?

就像word里文字加著重號一樣&#xff0c;在字的下面加一個點&#xff0c;用CSS怎么做&#xff1f;注意&#xff0c;我說的是下面加點&#xff0c;不是文字加粗或傾斜&#xff0c;請不要回答<strong>或<em>之類的。 把要著重加點的文字用<span></span>…

數據庫常見錯誤

錯誤&#xff1a; You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 12123123123.0123.0) at line 1 解決辦法&#xff1a; 檢查對應到您的MySQL服務器版本附近使用正確的語法手冊 數…

RocketMQ 5.0 大手筆,擁抱云原生,支持流處理,高可用架構升級!

大家好&#xff0c;我是君哥。RocketMQ 5.0 已經發布一段時間了&#xff0c;今天來分享一下 RocketMQ 5.0 有哪些新特性。1 架構變化RocketMQ 5.0 架構上的變化主要是為了更好的走向云原生。RocketMQ 4.x 架構如下&#xff1a;Broker 向 Name Server 注冊 Topic 路由信息&#…

php驗證碼顯示亂碼,如何解決php驗證碼亂碼問題

php驗證碼亂碼的解決辦法&#xff1a;1、修改訪問驗證碼生成方法函數的路徑&#xff1b;2、修改文件編碼&#xff0c;并去掉BOM頭&#xff1b;3、檢查驗證碼生成方法&#xff1b;4、修改服務環境。具體問題&#xff1a;php驗證碼輸出全是亂碼...<?php session_start();head…

中國HBase技術社區第五屆MeetUp ——HBase技術解析及應用實踐(深圳站)

HBase—Hadoop Database是一個分布式的、面向列的開源數據庫&#xff0c;該技術來源于 Fay Chang 所撰寫的Google論文“Bigtable&#xff1a;一個結構化數據的分布式存儲系統”。HBase的特點是高可靠性、高性能、面向列、可伸縮的分布式存儲系統&#xff0c;如今HBase已經廣泛應…

如何查找Power BI本地報表服務器產品密鑰

Power BI 報表服務器產品密鑰&#xff0c;以便在生產環境中安裝服務器。 已下載 Power BI 報表服務器&#xff0c;并已購買 SQL Server Enterprise 軟件保障協議。 或者&#xff0c;已購買 Power BI Premium。 希望在生產環境中安裝服務器&#xff0c;但需要產品密鑰才能進行安…

【.NET番外篇】Rust環境搭建+基礎開發入門+Rust與.NET6、C++的基礎運算性能比較

前言&#xff1a;突然想打算把Rust作為將來自己主要的副編程語言。當然&#xff0c;主語言還是C#&#xff0c;畢竟.NET平臺這么強大&#xff0c;寫起來就是爽。緣起&#xff1a;之前打算一些新的產品或者新的要開發的東西&#xff0c;由于沒有歷史包袱&#xff0c;就想重新選型…

基本圖形的光柵化算法

如何在指定的輸出設備上根據坐標描述構造基本二維幾何圖形&#xff08;點、直線、圓、橢圓、多邊形域、字符串及其相關屬性等&#xff09;。 圖形生成的概念 圖形的生成&#xff1a;是在指定的輸出設備上&#xff0c;根據坐標描述構造二維幾何圖形。 圖形的掃描轉換&#xff1a…

php左側,php左側補零

在php中有兩個函數——至少有兩個是否有其他的我還不知道&#xff0c;能夠實現數字補零&#xff0c;str_pad(),sprintf()詳細如下str_pad顧名思義這個函數是針對字符串來說的這個可以對指定的字符串填補任何其它的字符串例如:str_pad(帶填補的字符串,填補后的長度&#xff0c;填…

python - work3

# -*- coding:utf-8 -*-project: jiaxyauthor: Jimmyfile: work_20181107.pyide: PyCharm Community Editiontime: 2018-11-07 10:46blog: https://www.cnblogs.com/gotesting/## 1&#xff1a;一個足球隊在尋找年齡在10歲到12歲的小女孩&#xff08;包括10歲和12歲&#xff09…

團隊-中國象棋-最終程序

托管平臺地址:https://gitee.com/zhanghongjian666/ZhongGuoXiangQi 小組名稱:exciting 小組成員合照: 程序運行方法:html 程序運行示例及運行結果:轉載于:https://www.cnblogs.com/qwsa/p/7944093.html

NET CORE 基于緩存策略的SignalR控制推送頻率(每多少秒/多少次)API接口控制(限流)...

ASP.NET Core SignalR 概述&#xff0c;自行去官網搜。SignalR 沒有控制和前端推送頻率的功能&#xff0c;就是后端一旦發送請求&#xff0c;前端立馬響應。或者前端發送請求&#xff0c;后端立馬響應&#xff0c;但是如果誤操作&#xff0c;或者業務原因&#xff0c;對產生的信…

svn 的使用(二)

這篇主要介紹下 svn 鉤子的使用&#xff0c;svn 的安裝以及配置等能夠查看 svn 的使用&#xff08;一&#xff09; 我們能夠在svn創建的倉庫目錄下看到hooks 目錄。這里面就存放這個各種svn操作同一時候會運行的腳本文件。&#xff08;你能夠自己查看每一個腳本文件&#xff0c…

java原子類場景,CAS你知道嗎?原子類AtomicInteger的ABA問題談談?,原子共面問題...

CAS你知道嗎&#xff1f;原子類AtomicInteger的ABA問題談談&#xff1f;&#xff0c;原子共面問題(1)CAS是什么&#xff1f;比較并交換舉例1, CAS產生場景代碼&#xff1f;importjava.util.concurrent.atomic.AtomicInteger;public classCASDemo {public static voidmain(Stri…