Alibaba開源的ARouter使用SerializationService新姿勢

最近老板說要把我們的艾派派(APP)重新計劃一下,我坐在樹杈上想了半天瘦穆,覺得好像阿里爸爸開源的的ARouter才可以滿足我的需求,于是我就去GayHub赊豌,啊呸 扛或、GitHub上擼了一下官方文檔、

正常使用是沒有問題的碘饼,但是在使用到SerializationService的時候熙兔,我發(fā)現(xiàn)我的對象竟然不能發(fā)過去,我的天哪艾恼!我可是對著官方文檔來的誒住涉!

  • ARouter 版本 -> 沒錯
  • kotlin支持kadp -> 沒錯
  • FastJson版本 -> 沒錯
  • 注解 -> 沒錯

一個一個對下去,完全都沒問題钠绍,沒轍舆声,只好去官方群里問一下,有群友說柳爽,你的空構造函數(shù)呢媳握?
我的Bean代碼(Kotlin)是這樣的:

class MyObj(var name: String? = null
            , var sex: String? = null)

然后我再用反編譯,查看Java源碼:


import kotlin.Metadata;
import kotlin.jvm.internal.DefaultConstructorMarker;
import org.jetbrains.annotations.Nullable;

@Metadata(
   mv = {1, 1, 9},
   bv = {1, 0, 2},
   k = 1,
   d1 = {"\u0000\u0012\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\u000e\n\u0002\b\t\u0018\u00002\u00020\u0001B\u001d\u0012\n\b\u0002\u0010\u0002\u001a\u0004\u0018\u00010\u0003\u0012\n\b\u0002\u0010\u0004\u001a\u0004\u0018\u00010\u0003¢\u0006\u0002\u0010\u0005R\u001c\u0010\u0002\u001a\u0004\u0018\u00010\u0003X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\u0006\u0010\u0007\"\u0004\b\b\u0010\tR\u001c\u0010\u0004\u001a\u0004\u0018\u00010\u0003X\u0086\u000e¢\u0006\u000e\n\u0000\u001a\u0004\b\n\u0010\u0007\"\u0004\b\u000b\u0010\t¨\u0006\f"},
   d2 = {"Lcom/xiaolei/test/testroute/Beans/MyObj;", "", "name", "", "sex", "(Ljava/lang/String;Ljava/lang/String;)V", "getName", "()Ljava/lang/String;", "setName", "(Ljava/lang/String;)V", "getSex", "setSex", "production sources for module app"}
)
public final class MyObj {
   @Nullable
   private String name;
   @Nullable
   private String sex;

   @Nullable
   public final String getName() {
      return this.name;
   }

   public final void setName(@Nullable String var1) {
      this.name = var1;
   }

   @Nullable
   public final String getSex() {
      return this.sex;
   }

   public final void setSex(@Nullable String var1) {
      this.sex = var1;
   }

   public MyObj(@Nullable String name, @Nullable String sex) {
      this.name = name;
      this.sex = sex;
   }

   // $FF: synthetic method
   public MyObj(String var1, String var2, int var3, DefaultConstructorMarker var4) {
      if((var3 & 1) != 0) {
         var1 = (String)null;
      }

      if((var3 & 2) != 0) {
         var2 = (String)null;
      }

      this(var1, var2);
   }

   public MyObj() {
      this((String)null, (String)null, 3, (DefaultConstructorMarker)null);
   }
}

最后一行就是空構造函數(shù)磷脯。

然后我試著這樣寫試試:

class MyObj
{
    var name: String? = null
    var sex: String? = null
}

我發(fā)現(xiàn)蛾找,這樣子竟然成功了,不可思議……

我開始懷疑是不是FastJson的問題争拐,于是我去翻了FastJsonissues點這里

還真發(fā)現(xiàn)有人也遇見和我同樣的問題腋粥,說什么降低版本可以解決問題。降低版本我是拒絕的架曹、


笑哭

剛開始我想著換用GSON算了隘冲,后來一想,我用LruCache不是更好绑雄?展辞?
于是,我就換成LruCache:

import android.content.Context
import android.util.LruCache
import com.alibaba.android.arouter.facade.annotation.Route
import com.alibaba.android.arouter.facade.service.SerializationService
import java.lang.reflect.Type
import java.util.*

/**
 * Created by xiaolei on 2018/1/12.
 */
@Route(path = "/service/cache")
class CacheServiceImpl : SerializationService
{
    private val cacheInstance by lazy {
        val maxMemory = Runtime.getRuntime().maxMemory()
        val cacheSize = (maxMemory / 8).toInt()
        LruCache<String, Any>(cacheSize)
    }

    override fun init(context: Context)
    {

    }

    override fun object2Json(instance: Any): String
    {
        val uuid = UUID.randomUUID().toString()
        cacheInstance.put(uuid, instance)
        return uuid
    }

    override fun <T : Any> json2Object(input: String, clazz: Class<T>): T = parseObject(input, clazz)

    override fun <T : Any> parseObject(uuid: String, clazz: Type): T
    {
        val obj = cacheInstance.get(uuid)
        cacheInstance.remove(uuid)
        return obj as T
    }
}
  • 優(yōu)點万牺、使用Cache罗珍,直接使用原有對象洽腺,省去序列化與反序列化的消耗,以及帶來的各種沒必要的問題覆旱。使用UUID作為唯一Key蘸朋,不怕數(shù)據(jù)紊亂取錯數(shù)據(jù)。LruCache還會自我清理扣唱,所以也不怕數(shù)據(jù)太多就清除了藕坯。美滋滋~

End。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末噪沙,一起剝皮案震驚了整個濱河市炼彪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌正歼,老刑警劉巖辐马,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異局义,居然都是意外死亡喜爷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進店門旭咽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贞奋,“玉大人,你說我怎么就攤上這事穷绵〗嗡” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵仲墨,是天一觀的道長勾缭。 經(jīng)常有香客問我,道長目养,這世上最難降的妖魔是什么俩由? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮癌蚁,結果婚禮上幻梯,老公的妹妹穿的比我還像新娘。我一直安慰自己努释,他們只是感情好碘梢,可當我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伐蒂,像睡著了一般煞躬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天恩沛,我揣著相機與錄音在扰,去河邊找鬼。 笑死雷客,一個胖子當著我的面吹牛芒珠,可吹牛的內容都是我干的。 我是一名探鬼主播搅裙,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼妓局,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了呈宇?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤局雄,失蹤者是張志新(化名)和其女友劉穎甥啄,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炬搭,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蜈漓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宫盔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片融虽。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖灼芭,靈堂內的尸體忽然破棺而出有额,到底是詐尸還是另有隱情,我是刑警寧澤彼绷,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布巍佑,位于F島的核電站,受9級特大地震影響寄悯,放射性物質發(fā)生泄漏萤衰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一猜旬、第九天 我趴在偏房一處隱蔽的房頂上張望脆栋。 院中可真熱鬧,春花似錦洒擦、人聲如沸椿争。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丘薛。三九已至,卻和暖如春邦危,著一層夾襖步出監(jiān)牢的瞬間洋侨,已是汗流浹背舍扰。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留希坚,地道東北人边苹。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像裁僧,于是被迫代替她去往敵國和親个束。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,687評論 2 351

推薦閱讀更多精彩內容