FBReader閱讀器各原始碼作用和知識點分析

2021-06-27 13:26:22 字數 3540 閱讀 7521

zllibrary包下的

core

子包提供了要使用的各個抽象類,如。

其實例化了三個類,分別做資料庫,,library

的操作,這些類並未使用,但我們可以使用它們。

資料庫,首先建立或讀取資料庫,如果是新建則根據版本進行版本相容,初始化增刪改查的語句以供使用。(此處是通過構造方法的方式進行初始化的)

bug的處理

自己捕獲異常,並處理,當發生無法捕捉的異常(如執行時異常時)會轉到這個handler

執行。

thread.setdefaultuncaughtexceptionhandler(

newuncaughtexceptionhandler(this)

這裡的uncaughtexceptionhandler

就是異常處理類(繼承自同名類)

在這個裡面,我們可以開啟乙個activity

用於處理和顯示頁面

該activity

配置如下:

<

activity

android:name="org.geometerplus.android.fbreader.crash.fixbooksdirectoryactivity"

android:configchanges="orientation|keyboardhidden"

android:process=":crash"

android:theme="@android:style/theme.dialog"

>

<

intent-filter

>

<

action

android:name="android.fbreader.action.crash" 

/>

<

category

android:name="android.intent.category.default" 

/>

<

data

android:scheme="cachedcharstorageexception"

/>

intent-filter

>

activity

>

使用的是action+uri

的intent

方式,如果能夠找到解決方案則進入

activity

如果不行,則進入bugreportactivity。

<

activity

android:name=".library.bugreportactivity"

android:configchanges="orientation|keyboardhidden"

android:label="fbreader crash"

android:process=":crash"

/>

fbreader基礎

------------zlandroidactivity

該類是fbreader

的父類,實現功能如下:

·轉屏判斷

·亮度判斷

·電量判斷

·wakelock

從使用的view

可以知道,該

activity

指定的layout

為r.layout.main

,其主要操作的就是

org.geometerplus.zlibrary.ui.android.view.zlandroidwidget

在org.geo.meterplus.zlibrary.ui.android.library

包下,

高階--fbreader 

oncreate中設定佔據螢幕大小,新增功能(

action

),新增3個

popup到。

onstart中檢查螢幕大小是否符合,不符重開

activity,

為oncreate

中新增的3個

popup

設定位置

zltreeresource樹形資源

實現類似於樹形xml

的效果,能夠載入資源

如errormessage

下的error

zlresource.resource("errormessage").getresource(「error」).getvalue()

uiutil ui提示工具類(提供

toast

等提示)

,curl

,slide

,shift

翻頁方式的改變十分簡單,只需要更改scrollingpreferences.

animationoption即可

其呼叫在zlandroidwiget

中的getanimationprovider方法中。

所以,如果我們想自定義乙個翻頁動畫,可以通過如下幾步完成:

1 自定義乙個類繼承自animationprovider

2 實現其方法(必要實現方法:

3 在zlview

的animation

列舉中新增自身標識

public

static

enum animation  else

if (!mycurrentpage.endcursor.isnull() &&

!mynextpage.startcursor.isnull() &&

!mycurrentpage.endcursor.samepositionas(mynextpage.startcursor))  else {

myorientation = activityinfo.screen_orientation_landscape;

setrequestedorientation(myorientation);

根據當前寬高對比確定螢幕朝向,並改變。

執行如下**即可:

此處的precent

為1-100

的值,當想讓螢幕自定亮度,則

attrs.screenbrightness

可以傳入

-1f即可。

final windowmanager.layoutparams attrs = getwindow().getattributes();

attrs.screenbrightness = percent / 100.0f;

getwindow().setattributes(attrs);

在實際應用中某個操作需要分成多個耗時操作執行,而這時我們一般需要乙個進度對話方塊來顯示進度。如正在登陸,正在載入列表····等等

所以可以建立乙個queue

用於儲存需要操作的資訊

·每個耗時操作可以放到乙個runnable

中執行,每個操作都有其自己的訊息(如正在登陸)

所以可以建立乙個pair

,用於儲存這兩份資訊。

·執行乙個runnable

完成後,才繼續執行之後的任務,所以需要進行鎖定

詳情見queuemessageutil

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

護照閱讀器

護照閱讀器 首先從一代 二代護照閱讀器到最新嵌入式護照閱讀器,本身就是乙個識別技術 識別功能 識別準確率都逐步提高的過程。接下來看看桌面式跟嵌入式的應用行業,到底這兩款護照閱讀器有什麼區別?桌面式護照閱讀器 酒店管理系統 機場安全檢查管理系統 訪客管理系統 網咖實名制登記管理系統 汽車尾氣檢測管理系...

中華pdf閱讀器 IReader閱讀器使用體驗

作為一名秉承著 時間寶貴,多讀名著 的讀者,自2016年便開始使用掌閱平台讀書,剛開始在平板上閱讀,隨著閱讀量增大,覺得對眼睛傷害逐漸明顯,時常乾澀痠癢,於是在2017年年底購買了掌閱當年新出的產品 ireader ocean,之後便一直在該閱讀器上讀書。至今已在掌閱平台讀書一百三十餘本。對於打算入...