Android編程權(quán)威指南(第三版)第六章學(xué)習(xí)筆記

無關(guān)技術(shù)

日日行,不怕千萬里;

時(shí)時(shí)做,不怕千萬事.

本章概要

本章主要講了SDK的相關(guān)版本和兼容性的問題.

SDK最低版本

以最低版本設(shè)置為標(biāo)準(zhǔn),操作系統(tǒng)會(huì)拒絕將應(yīng)用安裝在系統(tǒng)版本低于標(biāo)準(zhǔn)的設(shè)備上.
比如設(shè)置最低版本為19.在Android系統(tǒng)低于19的設(shè)備上都是拒絕安裝此應(yīng)用的.

SDK目標(biāo)版本

目標(biāo)版本的設(shè)定值告知android:應(yīng)用是為哪個(gè)API級(jí)別設(shè)計(jì)的.
大多數(shù)情況下,目標(biāo)版本即最新發(fā)布的android版本.

但是,新發(fā)布的sdk版本可能會(huì)改變應(yīng)用在設(shè)備上的顯示方式,或者運(yùn)行行為也改變了.
這時(shí)候可以降低目標(biāo)版本.比如android 6.0 權(quán)限行為,7.0以上的fileProvider等

有些第三方庫的影響等等,只好降低目標(biāo)版本到22.運(yùn)行正常.

降低sdk目標(biāo)版本可以保證的是:即便在高于目標(biāo)版本的設(shè)備上,應(yīng)用仍然可以正常運(yùn)行,且運(yùn)行行為與目標(biāo)版本一致.但是新版本總的變化已經(jīng)被忽略了.

SDK編譯版本

sdk最低版本和sdk目標(biāo)版本會(huì)通知給操作系統(tǒng),而sdk編譯版本只是你和編譯器之間的私有信息.
編譯代碼時(shí),sdk編譯版本指定具體要使用的系統(tǒng)版本.

安全添加新版本API中的代碼

最低版本和編譯版本的差異較大,由此帶來的問題需要解決.比如,你的手機(jī)是4.4的API級(jí)別是19. 你的代碼中使用了API19以后的sdk版本中代碼,那么運(yùn)行時(shí),你的應(yīng)用就會(huì)奔潰.

受益于android Lint,這類問題,會(huì)有提示.

挑戰(zhàn)練習(xí)

顯示設(shè)備運(yùn)行系統(tǒng)的api級(jí)別

應(yīng)用運(yùn)行時(shí),調(diào)用Build.Version.SDK_INT 就是運(yùn)行的版本.
所以可以使用如下代碼
`

    mApiVersionTextView = findViewById(R.id.api_version_text_view);
    String apiLevel = getString(R.string.api_level, Build.VERSION.SDK_INT);
    mApiVersionTextView.setText(apiLevel);

`

其中TextView的布局
`

<TextView
    android:id="@+id/api_version_text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="24dp"
    android:text="@string/api_level"
    />

`

限制作弊次數(shù)

思路:聲明一個(gè)int值mCheatCount,用于記錄用戶作弊的次數(shù),每次作弊的時(shí)候,都會(huì)在onActivityResult記錄,可以在改方法中遞增這個(gè)值.

要考慮到屏幕旋轉(zhuǎn)等的問題,需要在上一個(gè)(05)章節(jié)完成挑戰(zhàn)練習(xí)中的基礎(chǔ)上來做這道題.
`

   if (mIsCheaters[mCurrentIndex]) {
            mCheatCount++;
            mRemainCountTextView.setText("remain cheat count:" + (3 - mCheatCount));
        }

`
這種方法雖然實(shí)現(xiàn)了,但是正常情況下,應(yīng)該是同一道題,我查看答案了,應(yīng)該下次再來查看,是不應(yīng)該記錄作弊的次數(shù)的.

首先想到的是聲明一個(gè)int值mLastPosition,默認(rèn)為-1,
當(dāng)這個(gè)值不等于當(dāng)前索引的值,才去遞增mCheatCount.
實(shí)現(xiàn)如下:

`

   if (mIsCheaters[mCurrentIndex] && mLastPosition != mCurrentIndex) {
            mCheatCount++;
            mLastPosition = mCurrentIndex;
            mRemainCountTextView.setText("remain cheat count:" + (3 - mCheatCount));
        }

`
后來想想,這樣做是有問題的,比如第一道題作弊了(mLastPosition=0),然后點(diǎn)擊下一道題,也作弊了(mLastPosition =1).然后多次點(diǎn)擊next按鈕,回到第一道題,再去作弊.
這時(shí)候mLastPosition( = 1) != mCurrentIndex(= 0)條件成立,而明明第一道題已經(jīng)作弊了,再次查看不應(yīng)該記錄作弊次數(shù)才對(duì)的.

所以想到要用數(shù)組來記錄作弊與否.
聲明一個(gè)boolean數(shù)組,默認(rèn)值都是false,當(dāng)用戶作弊后,就將當(dāng)前索引的值改為true
此時(shí)如果用戶作弊了,還需要滿足當(dāng)前索引值的boolean,為false才去遞增作弊次數(shù).

`

        mIsCheaters[mCurrentIndex] = CheatActivity.wasAnswerShown(data);
        if (mIsCheaters[mCurrentIndex] && !mCheatCounts[mCurrentIndex]) {
            mCheatCount++;
        //  mLastPosition = mCurrentIndex;
            mCheatCounts[mCurrentIndex] = true;
            mRemainCountTextView.setText("remain cheat count:" + (3 - mCheatCount));
        }

`

考慮到屏幕旋轉(zhuǎn)的問題,應(yīng)該將這些值,都保存在bundle中.
按鈕的禁用就很容易了,只需要判斷作弊次數(shù)>=3,就將按鈕設(shè)置為不可用.
當(dāng)然,防止屏幕旋轉(zhuǎn),需要聲明一個(gè)boolean來保存按鈕的可用性.然后將這個(gè)值保存在bundle中.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末呢灶,一起剝皮案震驚了整個(gè)濱河市吴超,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸯乃,老刑警劉巖鲸阻,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異缨睡,居然都是意外死亡鸟悴,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門奖年,熙熙樓的掌柜王于貴愁眉苦臉地迎上來细诸,“玉大人,你說我怎么就攤上這事陋守∽嵫撸” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵嗅义,是天一觀的道長屏歹。 經(jīng)常有香客問我,道長之碗,這世上最難降的妖魔是什么蝙眶? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任腮介,我火速辦了婚禮儒喊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己沼沈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布拆又。 她就那樣靜靜地躺著养晋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪收恢。 梳的紋絲不亂的頭發(fā)上武学,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音伦意,去河邊找鬼火窒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛驮肉,可吹牛的內(nèi)容都是我干的熏矿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼离钝,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼票编!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卵渴,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤慧域,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后奖恰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吊趾,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年瑟啃,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了论泛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛹屿,死狀恐怖屁奏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情错负,我是刑警寧澤坟瓢,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站犹撒,受9級(jí)特大地震影響折联,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜识颊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一诚镰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦清笨、人聲如沸月杉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苛萎。三九已至,卻和暖如春检号,著一層夾襖步出監(jiān)牢的瞬間腌歉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國打工谨敛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留究履,地道東北人滤否。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓脸狸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親藐俺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炊甲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評(píng)論 25 707
  • 當(dāng)我在別人的文章中看到,“女人的化妝欲芹,打扮卿啡,是對(duì)別人的尊重”這個(gè)觀點(diǎn)時(shí),著實(shí)心里一驚菱父。這個(gè)觀點(diǎn)和我從小所受到的教...
    藍(lán)果東閱讀 357評(píng)論 1 1
  • 半年多前入了簡(jiǎn)書的圈浙宜,但是一直惡習(xí)難改官辽,幾分鐘熱度地沒有堅(jiān)持寫下去。 推的第一篇文是這個(gè)簡(jiǎn)書交友粟瞬,當(dāng)時(shí)的身上戾氣很...
    InMarguerite閱讀 7,036評(píng)論 520 212
  • “一杯敬明天同仆,一杯敬過往”…… 細(xì)雨,朦霧裙品;熟普俗批,眼神…… 善待,安好……
    Shealy222閱讀 185評(píng)論 0 0