【面试复盘】
1.apt 动态生成代码 多模块
2.jni 步骤 【ok】
写一个native方法
对应这个方法在cpp中实现代码逻辑
System.loadLibrary()
cmakelists.txt addlirary 添加定义cpp
3.webview html5 互调
webView.addJavascriptInterface webView.evaluateJavascript
class WebViewActivity : AppCompatActivity() {
lateinit var webView :WebView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_web_view)
webView = findViewById(R.id.webview)
webView.loadUrl("file:///android_asset/demo.html")
webView.settings.javaScriptEnabled = true
webView.webViewClient = object :WebViewClient(){
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
val url = request?.url.toString()
if (url.startsWith("tel:")){//## html 打电话:tel
val intent = Intent(Intent.ACTION_DIAL , Uri.parse(url))
startActivity(intent)
return true ;
}else if(url.startsWith("mailto:")){//html 打电话
val intent = Intent(
Intent.ACTION_SENDTO,
Uri.parse(url)
)
startActivity(intent)
return true ;
}
return super.shouldOverrideUrlLoading(view, request)
}
}
//使用这个类,使得html 里的点击,能调原生的方法
webView.addJavascriptInterface(MyJavaScriptInterface(),"AndroidInterface")
//##点击原生按钮,使得html 里的javascript的方法调用
findViewById<Button>(R.id.btn).setOnClickListener{
val time = System.currentTimeMillis()
webView.evaluateJavascript("javascriptMethodName($time)" ,object : ValueCallback<String>{
override fun onReceiveValue(value: String?) {
Toast.makeText(getApplicationContext(), value, Toast.LENGTH_SHORT).show()
}
})
}
}
//定义javascript类和方法
inner class MyJavaScriptInterface {
@JavascriptInterface
fun showToast(message: String?) {
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show()
}
}
}
4.jvm 内存 内存模型
5.存储文件方式 mmkv 【ok】
sharep
6.google上架
1.使用代理
2.买个外网的window服务器,远程桌面 ,然后通过浏览器访问
7.firbase 推送
8.handle Loop 和 handle 的数量
一个loop 对应多个handle
9.暗黑模式
values-night