最全Android Hybrid混合开发,2024年最新那些年Android面试官常问的知识点

最后

分享一份NDK基础开发资料

详解:Linux网络虚拟化技术

分享内容包括不限于高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

本例demo下载地址:HybridDemo下载

简介:

混合开发(Hybrid)也有一段时间了,现在闲下来总结一下。

说到混合开发,重要功能有2种,一是网页端调用安卓原生接口或功能,二是安卓原生调用网页功能。

效果图:

在这里插入图片描述

Hybrid开发流程:

1、Android端编写方法api,暴露给h5页面调用

创建一个供网页端调用的类,如JSObject,里面编写供网页调用的方法,记得在方法上面添加@JavascriptInterface注释,否则在有些SDK版本上使用addJavascriptInterface方法(下面会用到)绑定JS对象时会报"they will not be visible in API 17"错误。

package mhwang.com.hybriddemo;

import android.content.Context;

import android.webkit.JavascriptInterface;

import android.widget.Toast;

public class JSObject {

private Context mContext;

public JSObject(Context context) {

mContext = context;

}

@JavascriptInterface

public int add(int a, int b){

return a + b;

}

@JavascriptInterface

public void showToast(String msg){

Toast.makeText(mContext, msg, Toast.LENGTH_SHORT).show();

}

}

这里提供了2个方法给网页端调用,分别为add()方法和showToast()方法。

2、网页端添加Android端调用接口

创建html网页hybrid_test.html,并添加调用接口,在网页的javascript代码中使用上面安卓提供的MyJS.add()来调用。MyJS可以看成是JSObject类在网页中的别名,下面会使用webviewaddJavascriptInterface()方法将它们关联起来。

Hybrid开发测试

网页端


调用本地加法运算并显示


3、Android端封装一个生成网页端方法url的类

正常来说Android端直接使用webview的loadUrl(“javascript:”+网页方法名)就可以直接调用的,但是方法一多这样就比较容易乱,因此创建一个专门管理的类好点。

创建生成网页方法的类NativeObject。

package mhwang.com.hybriddemo;

/** 用于封装拼接调用js方法的语句

*/

public class NativeObject {

/** 为了方便获取String 类型的字符串

  • @param s 加‘’号的参数

  • @return 加了‘’号的参数

*/

private static String getJsStringParam(String s){

return “'”+s+“'”;

}

public static String makeSentence(String world1, String world2){

return “javascript:makeSentence(”+getJsStringParam(world1)+“,”+getJsStringParam(world2)+“)”; // 这里要注意的是,若是传递的参数是字符串,那么在拼接调用的url的时候需要对参数加上‘’号。

}

public static String add(int a, int b){

// 不是字符串的话不用加‘’号

return “javascript:add(”+a+“,”+b+“)”;

}

}

这里生成的2个方法是跟上面网页javascript代码提供的2个方法对应的。然后在需要调用的地方使用就可以,如:

wv_test.loadUrl(NativeObject.add(5, 10));

如果系统版本大于4.4,可以使用evalute.Javascript()方法,该方法的好处是可以回调javascript的返回结果。并且这个方法比 loadUrl 方法更加方便简洁,比 loadUrl 效率更高,因为 loadUrl 的执行会造成页面刷新一次,这个方法不会,下面是这个方法的使用示例:

final int version = Build.VERSION.SDK_INT;

if (version < 18) {

wv_tests.loadUrl(jsStr);

} else {

wv_test.evaluateJavascript(jsStr, new ValueCallback() {

@Override

public void onReceiveValue(String value) {

//此处为 js 返回的结果

}

});

}

4、创建网页存放文件夹(不使用本地网页的可以跳过)

在Android工程res下面添加assets文件夹,用于存放本地网页文件hybrid_test.html。

在这里插入图片描述

5、添加webview组件及设置webview属性

.xml布局文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

xmlns:android=“http://schemas.android.com/apk/res/android”

xmlns:tools=“http://schemas.android.com/tools”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:orientation=“vertical”

tools:context=“.MainActivity”>

<WebView

android:layout_width=“match_parent”

android:layout_height=“0dp”

android:layout_weight=“1”

android:id=“@+id/wv_test”/>

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“0dp”

android:orientation=“vertical”

android:background=“@color/colorPrimary”

android:layout_weight=“1”>

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:text=“Android端”

android:textSize=“30dp”/>

<Button

android:layout_gravity=“center”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:id=“@+id/btn_makeSentence”

android:text=“造句”/>

<Button

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:id=“@+id/btn_webAdd”

android:layout_gravity=“center”

android:text=“做加法”/>

相应的.java文件

public class MainActivity extends Activity {

WebView wv_test;

Button btn_makeSentence;

Button btn_webAdd;

private static final String JSOBJECT = “MyJS”;

@SuppressLint(“SetJavaScriptEnabled”)

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

wv_test = findViewById(R.id.wv_test);

btn_makeSentence = findViewById(R.id.btn_makeSentence);

btn_webAdd = findViewById(R.id.btn_webAdd);

最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

【Android思维脑图(技能树)】

知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。

【Android高级架构视频学习资源】

**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

高级架构视频学习资源】**

**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值