weex用于android調(diào)研總結(jié)

1.更新方式

更新方式主要有兩種,

第一種痢缎,將準(zhǔn)備和項(xiàng)目一起打包的js文件放置在assets文件夾下胁勺,同時(shí)增加更新js文件的邏輯和讀取更新文件的邏輯,當(dāng)在apk發(fā)布之后想要更新js文件時(shí)独旷,只要走下載邏輯署穗,將js文件下載到自定義目錄下,在加載的時(shí)候讀取新的js文件即可嵌洼。

這種方式的缺點(diǎn)在于案疲,js文件普遍都比較大,我目前做的兩個(gè)demo一個(gè)展示的功能頁面是40kb麻养,紅包雨動畫是16kb褐啡,如果有數(shù)十個(gè)文件,那么apk的大小也是無法保證的鳖昌。

第二種备畦,直接訪問后臺提供的js文件低飒,即通過網(wǎng)絡(luò)方式加載,類似于webview加載h5頁面懂盐,此種方式可以搭配緩存策略來做褥赊。

兩種方式可以配合使用,對于比較重要的頁面可以放在assets下面莉恼,其他的頁面可以通過初始化時(shí)進(jìn)行下載拌喉,之后如果有更新可以通過和本地的文件進(jìn)行版本比對,如果需要更新再下載俐银,不需要更新就是用本地文件尿背。變動較大的可以直接使用網(wǎng)絡(luò)文件。

2.自定義組件

自定義Native View
public class WeexImageView extends WXComponent {

public WeexImageView(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, boolean isLazy) {
    super(instance, dom, parent, isLazy);
}

@Override
protected View initComponentHostView(@NonNull Context context) {
    return new KaolaImageView(context);
}

@Override
public View getHostView() {
    return super.getHostView();
}

@WXComponentProp(name = "url")
public void setUrlStr(String url) {
    ImageLoaderManager.startLoad(new ImageLoaderBuilder(((KaolaImageView) mHost), url));
}
}
//注冊之后weex才能使用當(dāng)前view
WXSDKEngine.registerComponent("kaolaimage", WeexImageView.class);

通過$vm(id)找到自定義組件的上下文捶惜,通過this.$el(id)找到組件残家。

自定義Module
public class DeviceModule extends WXModule {
  @WXModuleAnno
  public void getOSVersion(@Nullable JSCallback callback) {
    String osversion = android.os.Build.VERSION.RELEASE;
    if(callback != null) {
      callback.invoke(osversion);
    }
  }

  @WXModuleAnno
  public void getSDKVersion(@Nullable JSCallback callback) {
    @SuppressWarnings("deprecation")
    String sdkversion = android.os.Build.VERSION.SDK;
    if(callback != null) {
      callback.invoke(sdkversion);
    }
  }
}

WXSDKEngine.registerModule("deviceApi", DeviceModule.class);
自定義weex View

官方文檔中提到了自定義weex view的方法,其中在一個(gè)新的we文件中定義view是可以達(dá)到效果的售躁,如果新view與使用者不在同一個(gè)目錄下,需要使用 require('path-a/new.we') 引用進(jìn)來才可以茴晋。官網(wǎng)孩提供的另外一種陪捷,文件內(nèi)部的引用view的方法是不行的,在中英文的文檔中分別有兩種方式一種是通過 <element> 一種是通過 <we-element> ,兩種我都試過了沒有效果诺擅。

3.調(diào)試方式

調(diào)試方式我開發(fā)的時(shí)候主要采用了三層方式市袖。第一層在瀏覽器中調(diào)試,第二層通過weex-pack在官方提供的demo項(xiàng)目中調(diào)試烁涌,第三步再放在我們項(xiàng)目中進(jìn)行調(diào)試苍碟。

1.在瀏覽器中進(jìn)行調(diào)試,官方提供了單獨(dú)的we頁面可以直接通過weex filename.we命令熱更新到瀏覽器中查看撮执。通過這種方式可以很方便的在瀏覽器中查看log信息微峰。

這個(gè)命令有個(gè)缺點(diǎn),多個(gè)文件就無法通過此命令動態(tài)更新抒钱,必須一個(gè)一個(gè)執(zhí)行蜓肆。

2.通過weex-pack命令,能夠生成一個(gè)官方提供的demo項(xiàng)目谋币,其中提供了android仗扬,ios和web三種方式的打包,通過這種方式可以直接打包成apk在手機(jī)上調(diào)試蕾额。

在demo中調(diào)試時(shí)早芭,可以使用weex debug命令,打開瀏覽器的窗口诅蝶,掃描二維碼即可在瀏覽器中調(diào)試退个,方便查看log信息募壕。

這個(gè)步驟需要針對手機(jī)進(jìn)行布局上的一些微調(diào),因?yàn)槲以趯?shí)現(xiàn)過程中發(fā)現(xiàn)在瀏覽器中運(yùn)行正常的demo帜乞,放在手機(jī)上就顯示不正確了司抱。主要是表現(xiàn)在布局上,目前還不太清楚原理黎烈,估計(jì)可能底weex使用的布局有關(guān)系习柠。

但是這種方式也有缺點(diǎn),初始化項(xiàng)目完成之后照棋,需要手動更改一次playground項(xiàng)目中的assets/disc目錄下的文件(可以全部刪除)资溃,因?yàn)槊看未虬粫h掉已經(jīng)無用的文件。感覺這里是個(gè)bug烈炭。

3.在項(xiàng)目中打包查看溶锭,通過以上兩步基本上放在我們項(xiàng)目中就不會有什么問題了。在weex_gala分支下符隙,我也在調(diào)試面板里增加了更新和demo顯示頁面趴捅,不過服務(wù)器我搭在了我的電腦上,之后會遷移到外網(wǎng)上霹疫。

一些目前遇到的問題

打包工具很多但是有一些不是很完善拱绑,還需要等待他們的版本更新,比如weexpack工具可以直接打包成apk丽蝎,但是無用的文件卻不會刪掉猎拨,需要手動刪除。weex loader工具需要自己設(shè)置很多東西來管理項(xiàng)目屠阻。期待之后weexpack的完善红省。

目前還不支持停止和還原動畫,他們之后的任務(wù)已經(jīng)羅列在這里了https://github.com/alibaba/weex/issues/1494国觉。

分頁加載的流暢性比RN好了很多吧恃,但是官方提供的下拉刷新和上拉加載效果都不是很好,會有卡頓的情況蛉加。

對Native的依賴比RN多蚜枢,本身并沒有加載圖片的方法,需要依賴native的加載圖片邏輯针饥。當(dāng)然也可以使用native的網(wǎng)絡(luò)加載模式厂抽。

因?yàn)閰⒖剂藇ue,所以主要的view更新都是響應(yīng)式的丁眼,即數(shù)據(jù)更新之后筷凤,view中即可實(shí)時(shí)顯示出來,但是這種data設(shè)置需要在<template>標(biāo)簽內(nèi),如果想在<style>中更新就不行了藐守。

單個(gè)的we文件的大小在10k以內(nèi)挪丢,但是生成的js文件就很大了,我做的兩個(gè)功能分別是16kb(動畫)和43kb(列表)卢厂。網(wǎng)上的Demo中有的有上百kb乾蓬,所以是否要把js文件放在本地的assets文件夾下還是需要考慮的。

目前的成果

完成了之前列表頁的分頁加載邏輯實(shí)現(xiàn)慎恒;

完成了首頁富運(yùn)營紅包雨動畫的實(shí)現(xiàn)任内;

跑通更新流程;

之后要做的事

在項(xiàng)目中統(tǒng)一weex總線邏輯融柬;

紅包雨動畫的暫停和點(diǎn)擊效果死嗦;

使用項(xiàng)目中成熟的模塊,例如請求模塊和一些基本信息獲取的方法粒氧;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末越除,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子外盯,更是在濱河造成了極大的恐慌摘盆,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件饱苟,死亡現(xiàn)場離奇詭異骡澈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)掷空,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來囤锉,“玉大人坦弟,你說我怎么就攤上這事」俚兀” “怎么了酿傍?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長驱入。 經(jīng)常有香客問我赤炒,道長,這世上最難降的妖魔是什么亏较? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任莺褒,我火速辦了婚禮,結(jié)果婚禮上雪情,老公的妹妹穿的比我還像新娘遵岩。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布尘执。 她就那樣靜靜地躺著舍哄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪誊锭。 梳的紋絲不亂的頭發(fā)上表悬,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音丧靡,去河邊找鬼蟆沫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛窘行,可吹牛的內(nèi)容都是我干的饥追。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼罐盔,長吁一口氣:“原來是場噩夢啊……” “哼但绕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惶看,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤捏顺,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后纬黎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幅骄,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年本今,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拆座。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,711評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冠息,死狀恐怖挪凑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情逛艰,我是刑警寧澤躏碳,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站散怖,受9級特大地震影響菇绵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜镇眷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一咬最、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧欠动,春花似錦丹诀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硝桩。三九已至,卻和暖如春枚荣,著一層夾襖步出監(jiān)牢的瞬間碗脊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工橄妆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留衙伶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓害碾,卻偏偏與公主長得像矢劲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子慌随,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評論 2 353

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