正在深刻倒騰weex,但願能夠將weex用在項目中。這裏找出了weex控制Android返回鍵的方法。html
項目使用的是Vue+VueRouter的單頁應用來寫Weex的,現有如下需求。前端
當頁面不在首頁上時,返回上一頁面。 this.$router.go(-1)
java
當頁面在首頁是,關閉當前Android應用android
使用的是globalEvent來實現的。咱們在 Android 的返回按鈕事件中觸發 globalEvent
,在 Weex 中監聽該 globalEvent
。git
Androidgithub
public void onBackPressed(){ Map<String,Object> params=new HashMap<>(); params.put("name","returnmsg"); mWXSDKInstance.fireGlobalEventCallback("androidback",params); }
Weexapache
globalEvent.addEventListener('androidback', function (e) { // 這裏就能夠作返回事件操做了,如返回上一頁或退出應用 // that.$router.go(-1) // weex.requireModule('close').closeApp() })
而Weex對Android的通訊使用Module擴展來實現。經過在Android中建立WXModule並在Application中註冊後,Weex調用該Module觸發Android事件。下面咱們來一步步實現。weex
1. Android中建立CloseModule前端工程師
public class CloseModule extends WXModule { @JSMethod(uiThread = false) public void closeApp() { LogUtil.e("觸發關閉效果"); CacheActivity.finishActivity(); } }
2. 在Application中註冊Moduleapp
public class WXApplication extends Application { @Override public void onCreate() { super.onCreate(); InitConfig config = new InitConfig.Builder().setImgAdapter(new ImageAdapter()).build(); WXSDKEngine.initialize(this, config); try { ... WXSDKEngine.registerModule("close", CloseModule.class); ... } catch (WXException e) { e.printStackTrace(); } } }
3. 在Weex中使用
weex.requireModule('close').closeApp()
這樣調用Module以後就能夠對Android作許多事情了。
這裏我還遇到了一個問題,就是在Weex提供的WXModule中如何退出Activity,解決方案爲android 關閉多個或指定activity,這篇文章讓我能夠很是優雅的管理個人Activity。簡單寫下用法.
1. 在每一個Activity的onCreate方法中將Activity對象添加到List中
@Override protected void onCreate(Bundle savedInstanceState) { ... CacheActivity.addActivity(NetworkActivity.this); }
2. 在Module中去關閉Activity
CacheActivity.finishActivity();
3. 固然,別忘了把CacheActivity的代碼貼到項目中去
package com.weex.sample.utlis; import android.app.Activity; import java.util.LinkedList; import java.util.List; public class CacheActivity { public static List<Activity> activityList = new LinkedList<Activity>(); public CacheActivity() { } /** * 添加到Activity容器中 */ public static void addActivity(Activity activity) { if (!activityList.contains(activity)) { activityList.add(activity); } } /** * 便利全部Activigty並finish */ public static void finishActivity() { for (Activity activity : activityList) { activity.finish(); } } /** * 結束指定的Activity */ public static void finishSingleActivity(Activity activity) { if (activity != null) { if (activityList.contains(activity)) { activityList.remove(activity); } activity.finish(); activity = null; } } /** * 結束指定類名的Activity 在遍歷一個列表的時候不能執行刪除操做,全部咱們先記住要刪除的對象,遍歷以後纔去刪除。 */ public static void finishSingleActivityByClass(Class<?> cls) { Activity tempActivity = null; for (Activity activity : activityList) { if (activity.getClass().equals(cls)) { tempActivity = activity; } } finishSingleActivity(tempActivity); } }
Over!繼續倒騰Weex中……遇到問題繼續總結。歡迎留言交流~
VioletJack,移動、前端工程師,兩年移動端工做經驗、一年前端工做經驗。現專一於移動前端的學習和開發。擅長Android開發和Vue前端開發。會按期產出關於Android、Vue、移動前端相關的博文。歡迎你們關注我,我會用心維護和經營好博客,多產出高質量文章。同時也但願我所寫的東西能夠幫到有須要的朋友。
新浪微博: http://weibo.com/u/2640909603
掘金:https://gold.xitu.io/user/571...
CSDN: http://blog.csdn.net/violetja...
簡書: http://www.jianshu.com/users/...
Github: https://github.com/violetjack