1. 程式人生 > >3.SurfaceView與多執行緒的混搭

3.SurfaceView與多執行緒的混搭

上一篇簡單介紹了SurfaceView的基本使用,這篇就介紹SurfaceView與多執行緒的混搭。SurfaceView與多執行緒混搭,是為了防止動畫閃爍而實現的一種多執行緒應用技術。android的多執行緒用法與Java的多執行緒用法完全一樣,本文不做多執行緒方面的介紹了。直接講解SurfaceView與多執行緒的混合使用,即開一條執行緒專門讀取圖片,另外一條執行緒專門繪圖。

先看效果圖,左邊是開單個執行緒讀取並繪圖,右邊是開兩個執行緒,一個專門讀取圖片,一個專門繪圖:

開啟雙執行緒

對比一下,右邊動畫的幀速明顯比左邊的快,左右兩者都沒使用Thread.sleep()。為什麼要開兩個執行緒一個讀一個畫,而不去開兩個執行緒像左邊那樣都“邊讀邊畫”呢?因為SurfaceView每次繪圖都會鎖定Canvas,也就是說同一片區域這次沒畫完下次就不能畫,因此要提高動畫播放的效率,就得開一條執行緒專門畫圖,開另外一條執行緒做預處理的工作。

main.xml的原始碼:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <?xml version="1.0" encoding="utf-8"?> android:layout_width="fill_parent" android:layout_height
="fill_parent" android:orientation="vertical"> <LinearLayout android:id="@+id/LinearLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <Button android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"
android:text="單個獨立執行緒" /> <Button android:id="@+id/Button02" android:layout_width="wrap_content"

相關推薦

3.SurfaceView執行

上一篇簡單介紹了SurfaceView的基本使用,這篇就介紹SurfaceView與多執行緒的混搭。SurfaceView與多執行緒混搭,是為了防止動畫閃爍而實現的一種多執行緒應用技術。android的多執行緒用法與Java的多執行緒用法完全一樣,本文不做多執行緒方面

[Xcode10 實際操作]八、網路執行-(3)使用UIApplication物件撥打電話

本文將演示如何使用應用程式單例物件,撥打電話的功能。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 注:需要使用真機進行測試。 1 import UIKit 2 3 class ViewController: UIViewController {

c#中委託執行的實質

delegate(委託)的概念,.Net的委託本質上就是指向函式的指標,只不過這種指標是經過封裝後型別安全的。委託和執行緒是兩個不同的概念,執行緒是動態的,委託就是一個或一組記憶體地址,是靜態的。執行緒執行時如果遇到了指向函式的指標就執行這個函式。.Net為了方便程式設計,給委託賦予了兩種方式以供呼

第六章單例模式執行——立即載入“餓漢模式”延遲載入“懶漢模式”

立即載入就是使用類的時候已經將物件建立完畢了,也稱為“餓漢模式” package test01; public class MyObject { // 建立物件 private static MyObject object = new MyObject(); private MyObjec

爬蟲執行

多執行緒和多程序爬蟲   一.執行緒 1.什麼是執行緒。 執行緒是作業系統能夠進行運算排程的最小單位。它被包含在程序中,是進城中的實際運作單位。一條執行緒指的是程序中一個單一順序的控制流,一個執行緒可以併發多個執行緒,每條執行緒執行不同的任務。   2.執行緒常用的方法

C語言高階篇 - 4.連結串列&狀態機執行

1.連結串列的引入 1、從陣列的缺陷說起         (1)陣列有2個缺陷,一個是陣列中所有元素的型別必須一致;第二個是陣列的元素個數必須事先制定並且一旦指定之後不能更改。         (2)如何解決

【Linux】程序執行之間的區別

http://blog.csdn.net/byrsongqq/article/details/6339240 網路程式設計中設計併發伺服器,使用多程序與多執行緒 ,請問有什麼區別?  答案一: 1,程序:子程序是父程序的複製品。子程序獲得父程序資料空間、堆和棧的複製品。 2,執行緒:相

程序、執行執行

一、說說概念 1、程序(process) 狹義定義:程序就是一段程式的執行過程。 廣義定義:程序是一個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。 簡單的來講程序的概念主

Java執行學習筆記21之單例模式執行

詳細程式碼見:github程式碼地址   第六章 單例模式與多執行緒 前言: 我之前已經開設了23個設計模式這個專欄,介紹了很多的Java設計模式,其中一些模式對於絕 大多數程式語言設計思想都是類似的,需要了解單例模式的可以去看看。 我們在實際開發中經常用到單例模式,但

探討kafka的分割槽數執行消費

kafka算是很麻煩的一件事兒,起因是最近需要採集大量的資料,原先是隻用了典型的high-level Consumer的API,最經典的不過如下:   [java] view plain copy

Python佇列執行及檔案鎖

佇列實現生產-多執行緒消費 先看程式碼 # -*- coding: utf-8 -*- import queue import threading mu = threading.Lock() class Producer(threading.Thread): def __init__(

執行(二):執行開啟方式執行(threading模組)

目錄 執行緒的建立Threading.Thread類 1)執行緒的建立 2)多執行緒與多程序 3)Thread類的其他方法 4)守護執行緒 multiprocess模組的完全模仿了threading模組的介面,二者在使用層面,有很大的相似性,因而不再詳細介紹(官方連結)

JavaSE基礎學習筆記及案例(一)IO流執行(上)

IO流 1. IO流知識點 IO流(字元輸入流FileReader) 位元組輸入流 FileInputStream IO流(字元輸出流FileWriter) 位元組輸出流 FileOutputStream 字元緩衝區輸入流( BufferedReader) 位元組緩衝區輸入流Bu

高併發執行的關係、區別、高併發的技術方案

高併發與多執行緒的關係、區別、高併發的技術方案 http://youzhixueyuan.com/high-concurrency-and-multithreading-high-concurrency-technical-solutions.html 什麼是高併發? 高併發(High

java中的Executors簡介執行在網站上逐步優化的運用案例

提供Executor的工廠類 忽略了自定義的ThreadFactory、callable和unconfigurable相關的方法 newFixedxxx:在任意時刻,最多有nThreads個執行緒在處理task;如果所有執行緒都在執行時來了新的任務,它會被扔

單例模式執行之間的關係總結

給大家推薦個靠譜的公眾號程式設計師探索之路,大家一起加油 單例模式與多執行緒之間的關係總結(魔怔多執行緒中~~~~~)   近日筆者被多執行緒與單例物件之間的關係產生了混淆。通過了一段時間的查閱,理清了兩者之間的管理,現做筆記梳理。如有不足,歡迎指出:) 在我在考慮考慮他們的時候思考了以

Java執行安全執行開發

網際網路上充斥著對Java多執行緒程式設計的介紹,每篇文章都從不同的角度介紹並總結了該領域的內容。但大部分文章都沒有說明多執行緒的實現本質,沒能讓開發者真正“過癮”。 從Java的執行緒安全鼻祖內建鎖介紹開始,讓你瞭解內建鎖的實現邏輯和原理以及引發的效能問題,接著說明了Java多執行緒程式設計中鎖的存在是為

[Xcode10 實際操作]八、網路執行-(4)使用UIApplication物件傳送簡訊

本文將演示如何使用應用程式單例物件,傳送簡訊的功能。在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】注:需要使用真機進行測試。 1 import UIKit 2 3 class ViewController: UIViewController { 4

[Xcode10 實際操作]八、網路執行-(6)使用UIApplication物件開啟地圖

本文將演示如何使用應用程式單例物件,開啟地圖的功能。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIKit 2 3 class ViewController: UIViewController { 4 5 o

[Xcode10 實際操作]八、網路執行-(5)使用UIApplication物件傳送郵件

本文將演示如何使用應用程式單例物件,傳送郵件的功能。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 注:需要使用真機進行測試。 1 import UIKit 2 3 class ViewController: UIViewController {