欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Android中如何使用注解代替枚舉節(jié)省系統(tǒng)內(nèi)存開(kāi)銷

這篇文章主要介紹Android中如何使用注解代替枚舉節(jié)省系統(tǒng)內(nèi)存開(kāi)銷,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

十余年的澠池網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整澠池建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“澠池網(wǎng)站設(shè)計(jì)”,“澠池網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

Java5以后開(kāi)始支持枚舉類型,枚舉類型使用起來(lái)非常方便,其重要的作用是作為類型安全使用的。如果在不考慮系統(tǒng)內(nèi)存開(kāi)銷的情況下大量的使用枚舉也不會(huì)有什么問(wèn)題。但是移動(dòng)端還是需要注意的。

android系統(tǒng)在應(yīng)用啟動(dòng)后會(huì)給應(yīng)用單獨(dú)分配一塊內(nèi)存。應(yīng)用的dex code、heap以及運(yùn)行時(shí)的內(nèi)存分配都會(huì)在這塊內(nèi)存中。而使用枚舉類型的dex size是普通常亮的13倍以上。在運(yùn)行時(shí)的內(nèi)存分配,一個(gè)enum的聲明至少要消耗掉20個(gè)bytes。從這兩點(diǎn)就可以說(shuō)明,在app中大量使用枚舉的內(nèi)存開(kāi)銷是非常大的。

枚舉最大的優(yōu)勢(shì)是類型安全。那么是不是又辦法在不使用枚舉的情況下做到類型安全呢?答案是肯定的,下面看看怎么干。

goodle官方很早就發(fā)現(xiàn)了枚舉對(duì)android系統(tǒng)帶來(lái)的性能開(kāi)銷,所以在其官網(wǎng)上就已經(jīng)提醒了開(kāi)發(fā)者盡量少的使用枚舉,而且還提供了注解的方式來(lái)檢查類型安全。目前其提供了int和string兩種注解方式。分別是:IntDef和StringDef。

示例:

一、Int類型注解檢查類型安全

package com.yw.enumproxylib;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import androidx.annotation.IntDef;/** * 定義一個(gè)int類型的注解 * 用注解代替枚舉,做到類型安全 * create by yangwei * on 2020-01-30 21:34 */public class EnumProxy {  public static final int READ_CAR = 0;//紅色的汽車  public static final int GREEN_CAR = 1;//綠色的汽車  public static final int YELLOW_CAR = 2;//黃色的汽車  @IntDef({READ_CAR, GREEN_CAR, YELLOW_CAR})  @Retention(RetentionPolicy.SOURCE)//源碼級(jí)別  public @interface CAR_Enum {  }  /**   * 獲取汽車類型   *   * @param car   * @return   */  public static int getCar(@CAR_Enum int car) {    switch (car) {      case READ_CAR:        return 0;      case GREEN_CAR:        return 1;      case YELLOW_CAR:        return 2;    }    return -1;  }}

二、String類型注解檢查類型安全

package com.yw.enumproxylib;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import androidx.annotation.StringDef;/** * 定義一個(gè)string類型的注解,用于檢查星期的類型安全。 * create by yangwei * on 2020-01-30 22:04 week */public class StringEnum {  public static final String MONDAY = "monday";  public static final String TUESDAY = "tuesday";  public static final String WENDESDAY = "wendesday";  public static final String THURSDAY = "thursday";  public static final String FRIDAY = "friday";  public static final String SATURDAY = "saturday";  public static final String WEEKDAY = "weekday";  @StringDef({MONDAY, TUESDAY, WENDESDAY, THURSDAY, FRIDAY, SATURDAY, WEEKDAY})//此處定義注解的值只能是這幾個(gè)  @Retention(RetentionPolicy.SOURCE)//編譯時(shí)注解,源碼級(jí)檢查  public @interface Week {  }  /**   * 獲取日期   *   * @param week   * @return   */  public static String getWeek(@Week String week) {    switch (week) {      case MONDAY:        return "星期一";      case TUESDAY:        return "星期二";      case WENDESDAY:        return "星期三";      case THURSDAY:        return "星期四";      case FRIDAY:        return "星期五";      case SATURDAY:        return "星期六";      case WEEKDAY:        return "星期日";    }    return null;  }}

三、用來(lái)檢查類型安全的MainActivity,從下面可以看到,當(dāng)使用EnumProxy.getCar輸入?yún)?shù)的時(shí)候,如果直接輸入一個(gè)整數(shù)則編譯不通過(guò)。當(dāng)輸入我們定義的EnumProxy.GREEN_CAR編譯才通過(guò)。

同理StringEnum也能檢查類型安全。

package com.yw.enumproxy;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import com.yw.enumproxylib.EnumProxy;import com.yw.enumproxylib.StringEnum;/** * 測(cè)試?yán)?*/public class MainActivity extends AppCompatActivity {  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    int car_black = 10;    int bk = EnumProxy.getCar(car_black);//此處類型檢查不通過(guò)    int ck = EnumProxy.getCar(EnumProxy.GREEN_CAR);//類型檢查通過(guò)    String str = "friday";    String week1 = StringEnum.getWeek(str);//直接賦值String時(shí)類型檢查不通過(guò)    String week2 = StringEnum.getWeek(StringEnum.FRIDAY);//賦值定義好的值時(shí)類型檢查通過(guò)  }}

以上是“Android中如何使用注解代替枚舉節(jié)省系統(tǒng)內(nèi)存開(kāi)銷”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享文章:Android中如何使用注解代替枚舉節(jié)省系統(tǒng)內(nèi)存開(kāi)銷
本文地址:http://www.chinadenli.net/article20/ieoejo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT軟件開(kāi)發(fā)標(biāo)簽優(yōu)化品牌網(wǎng)站建設(shè)網(wǎng)站制作外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化