- 博客(162)
- 收藏
- 关注
原创 Android-自定义插件---彻底解决method-not-found-问题,flutter页面跳转不刷新
import java.io.FileNotFoundExceptionimport java.util.Propertiesprivate val HOME = System.getProperty(“user.home”)private val CWD = System.getProperty(“user.dir”)/**这个类主要用来取 当前工程的 android.jar 的 绝对路径因为不一样的人 不一样的操作系统 不一样的 project 他们的 android.jar 路径
2022-02-18 14:15:31
624
原创 Android-架构新组件---让天下没有难做的-App,字节跳动+京东+美团+腾讯面试总结
Actor 是一个用 @Entity 注解的 data class,它会生成一个名字是 actors 的表,注意到有一个字段是 @Date? ,但是 SQLite 本身不支持这种复杂类型(complex type),所以我们还需要写一个可以转换成基础类型的转换器:class Converters {@TypeConverterfun timestampToDate(value: Long?) = value?.let { Date(it) }@TypeConverterfun dateToTime
2022-02-18 14:14:06
287
原创 Android-悬浮窗功能的实现(附Java、KT实现源码,经验总结
}, 1000)}}}}override fun onRestart() {super.onRestart()Log.d(“RemoteView”, “重新显示了”)//不显示悬浮框if (hasBind) {unbindService(mVideoServiceConnection)hasBind = false}}override fun onNewIntent(intent: Intent) {super.onNewIntent(intent)}override fu
2022-02-18 14:12:41
1375
原创 Android-WebView的使用,android与后端交互
myWebView.loadUrl(“http://jwgl.fjnu.edu.cn”);myWebView.setWebViewClient(new WebViewClient() {@Overridepublic void onPageFinished(WebView view, String url) {view.loadUrl(“javascript:” +“var username = document.getElementById(‘txtUserName’);” +“usernam
2022-02-18 14:09:51
454
原创 Android程序员这个职业,是选择去大公司好还是小公司?(1),android路由器
经过大四半年的 Java 培训,我只会点简单的 SQL,只会用 JDBC 写写增删改查。刚去没几天,就来了个项目,做一个内容发布系统,经理把这个项目交给了我自己,准确的说是还有一个美术帮忙作图,那两位程序员大哥,多少能指导我一些。小公司就这样,基本就是一个人负责一个小项目,后台开发是你,前端开发是你,测试也是你,写文档的还是你。如果有大项目的话,3 个人一起上……想太多了,一共 3 个人,对大项目免疫。这个项目我干了 3 个月,提前交付了,做的非常辛苦。有点增删改查的底子,所以后端Java代码写能凑合写
2022-02-17 20:16:04
107
原创 Android程序员的一片蓝海,5G时代必将成就的音视频开发,你废了吗
视频是什么?音频是什么?为什么要编码?视频编码(格式、H264编码)音频编码(格式、AAC编码)音视频容器硬解码和软解码区别初步了解OpenGL ES使用OpenGL渲染视频画面OpenGL渲染多视频,实现画中画深入了解OpenGL之EGLOpenGL FBO数据缓冲区Android音视频硬编码:生成一个MP4学习资料 音视频这块,目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的,在这里给大家整理了一份系统的学习.
2022-02-17 20:14:39
1434
原创 Android源码剖析:基于-Handler、Looper-实现拦截全局崩溃,apk瘦身
try {msg.target.dispatchMessage(msg);} finally {}if (logging != null) {logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);}msg.recycleUnchecked();}}public void quit() {mQueue.quit(false);}}如果主线程发生了异常,就会退出循环,
2022-02-17 20:13:14
1351
原创 Android游戏引擎汇总,JNI层MediaScanner的分析
支持分屏,网络多人玩家API,动态壁纸以Java为主,包括x86中原生库的C++为辅的引擎可免费获取源码http://wiki.andengine.org/List_of_Apps_and_Gameshttps://market.android.com/details?id=com.bestcoolfungamesfreegameappcreation.bunnyshooterEsenthel Engine - http://www.esenthel.com/?id=overview基于C++,
2022-02-17 20:10:24
186
原创 Android异步消息处理机制详解及源码分析,android直播sdk
public class MainActivity extends ActionBarActivity {private int mCount = 0;private Handler mHandlerThr = null;private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);Log.d(null, “>>&
2022-02-17 20:06:09
1371
原创 Android用Canvas画一个折线图,并加以简单封装,移动终端开发课设
}private void drawAxispoint(Canvas canvas,Paint p){textFont=widthCriterion/5*2;Typeface font = Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);p.setTypeface( font );p.setTextSize(textFont);for (int i = 1; i <=8 ; i++) {String text= String.val
2022-02-16 15:30:13
157
原创 Android源码解析——Handler,凭借这份《数据结构与算法》核心文档
sendMessageAtTime() 方法中在处理 Message 时,最终调用的是 enqueueMessage() 方法当中,需要注意 msg.target = this 这句代码,target 对象指向了发送消息的主体,即 Handler 对象本身,即由 Handler 对象发给 MessageQueue 的消息最后还是要交由 Handler&nbs
2022-02-16 15:27:23
117
原创 Android源码分析:LruCache 缓存机制实现原理,帮你解决95%以上的问题
/** Size of this cache in units. Not necessarily the number of elements. */private int size; //当前cache的大小private int maxSize; //cache最大大小private int putCount; //put的次数private int createCount; //create的次数private int evictionCount; //驱逐剔
2022-02-16 15:25:58
220
原创 Android消息总线的演进之路:用LiveDataBus替代RxBus、EventBus
图片摘自EventBus GitHub主页发布/订阅模式订阅发布模式定义了一种“一对多”的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。RxBus的出现RxBus不是一个库,而是一个文件,实现只有短短30行代码。RxBus本身不需要过多分析,它的强大完全来自于它基于的RxJava技术。响应式编程(Reactive Programming)技术这几年特别火,RxJava是它在Java上的实作。RxJava天生就是.
2022-02-16 15:24:33
248
原创 Android开发蓝牙基础总结,ndk开发环境
27 11 是 major 的值4C b9 是 minor 的值C5 表示 Measured Power 表示的是此设备在 1 米处的 RSSI 值,用于距离测算这段内容其实主要是苹果公司在蓝牙协议的基础上定义的。如果符合 1AFF4C000215 则说明此设备是 iBeacon 设备蓝牙应答包04 3e 38 0d 01 1b 00 01 8b 03 00 b0 01 c2 01 00 ff 7f af 00 00 00 00 00 00 00 0
2022-02-15 15:20:34
346
原创 Android开发者必看:Git使用过程中的一些常见场景问题总结
git commit --amend -m “your new log”3. 查看某次提交的日志和IDgit reflog4. 查看某次提交的内容git show <commit_id>5. 只是修改了工作区的文件,想恢复到原来修改前的样子git reset --hard HEADgit checkout – <file_name>6. 被修改的文件已经添加到了暂存区,想撤销添加git reset --mixed HEAD7. 被修改的文件已经commit提交,想
2022-02-15 15:19:08
180
原创 FART:ART环境下基于主动调用的自动化脱壳方案,kotlin参数默认值
5381 SamplingProfilerIntegration.start();53825383 // CloseGuard defaults to true and can be quite spammy. We5384 // disable it here, but selectively enable it later (via5385 // StrictMode) on debug builds, but using DropBox
2022-02-05 13:14:18
250
原创 EventBus源码学习,android输入法开发
if (defaultInstance == null) {synchronized (EventBus.class) {if (defaultInstance == null) {defaultInstance = new EventBus();}}}return defaultInstance;}// 调用带参数的构造方法public EventBus() {this(DEFAULT_BUILDER);}//EventBus(EventBusBuilder builder)
2022-02-05 13:12:53
2072
原创 Android高级工程师技能知识储备,成功入职阿里
五、高级9.多媒体图形图像2D: android.graphics android. graphics. drawable3D: android. opengl音频: android. media xxx音采集: Mediarecoder, Audiorecord音放: Mediaplayer, Soundpool, Audiotrack, Ring Tone频偏解码: Mediacoder控制音量和声模式: Audiomanager, Audioservice
2022-02-04 14:02:28
209
原创 Android项目文件结构解析,flutter页面跳转刷新
(1)drawable目录存放各种位图文件(如png、jpg、gif)等 (2)layout目录存放界面布局文件 (3)mipmap目录存放图标文件,虽然drawable也能存放图标文件但是在这个目录下存放图标会有性能优化。以下是官方介绍:Using a mipmap as the source for your bitmap or drawable is a simple way to provide a quality image and various image scales, wh
2022-02-04 14:01:04
141
原创 Android面试题精选——再聊Android-Handler机制,深入解析android核心组件和应用框架
throw new RuntimeException(“Only one Looper may be created per thread”);}sThreadLocal.set(new Looper(quitAllowed));}//获取当前线程的Looper对象public static @Nullable Looper myLooper() {return sThreadLocal.get();}这里有一个很关键的类:ThreadLocal,它一个线程内部的数据存储类,通过它存储的数据
2022-02-04 13:58:13
203
原创 Android面试抱佛脚:进程间通讯学习,从Binder使用看起
val file = File(“aaaa”)file.createNewFile()///序列化过程ObjectOutputStream(FileOutputStream(file)).use {it.writeObject(User(“张三”))}///反序列化val user: User? =ObjectInputStream(FileInputStream(file)).use {it.readObject() as User?}println(“序列化结果”)printl
2022-02-04 13:55:24
149
原创 Android面试官感悟:年后跳槽季,这6大技巧教你在面试中大获成功挤入一线互联网大厂
大厂面试中技巧根据我的经验,能否给出正确答案与在工作中是否有良好的表现,二者之间的联系并不大。然而我发现,面试者找到解决方案的方式之间有一些共同点。我发现,是否掌握了处理复杂数据结构的编程技巧,与实际工作中的长期表现之间几乎没有联系。通常在日常工作中,你只需要完成基本的工作。技巧1:准备一份漂亮的简历一份漂亮的简历就是你进入大厂的敲门砖。技巧2:自我介绍要背得滚瓜烂熟自我介绍可以说是面试的必要环节,无论你参加什么形式的面试,面试官一定会首先让你做一个简单的自我介绍,所以自我介绍这一关一定要准备充
2022-02-04 13:53:59
111
原创 Android面试刨根问底之常用源码篇(一),下血本买的
}else if (oldThr > 0)//通过threshold设置新数组容量newCap = oldThr;else {…}if (newThr == 0) {…}threshold = newThr;@SuppressWarnings({“rawtypes”,“unchecked”})//通过threshold设置table的初始容量Node<K,V>[] newTab = (Node<K,V>[])new Node[newCap];tabl
2022-02-04 13:52:34
2554
原创 Android面试分析一:关于OKhttp详解(附带视频教程,kotlin单例firbase
获取响应的数据okhttp基本流程1: 先搞懂责任链是个啥?基于责任链搞清楚reponse okhttp2:搞清楚拦截器重试/重定向:桥拦截器:封装header属性 host keep-live gzip header 进行基本设置,缓存拦截器连接拦截器CallServerInterceptorexecutorService = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60, TimeUnit.SECON
2022-02-04 13:51:09
3193
原创 Flutter开发之——Android通信-BasicMessageChannel,原生安卓开发
2.1 Flutter 端创建 MethodChannel 通道代码void main() => runApp(BasicMessageChannelDemo());class BasicMessageChannelDemo extends StatefulWidget {@override_BasicMessageChannelDemoState createState() => _BasicMessageChannelDemoState();}class _BasicMessa
2022-02-03 17:21:19
850
原创 Flutter学习(3)一些项目概念以及对Flutter的看法,flutter调用原生sdk
onPressed: () {//导航到新路由Navigator.push(context, MaterialPageRoute(builder: (context) {return NewRoute();}));},)],}运行后效果如下:点击蓝色按钮之后:6.MaterialPageRoute在上面新建一个页面的时候,我们可以知道 Navigator相当于路由栈。我们向其中push一个 MaterialPageRoute(context,build)。MaterialP
2022-02-03 17:18:29
1095
原创 Flutter之FutureBuilder的学习和使用,Android多进程从头讲到尾
//连接到一个活跃的操作,比如stream流,会不断地返回值,并还没有结束,一般也是可以加载个菊花active,//异步操作执行结束,一般在这里可以去拿取异步操作执行的结果,并显示相应的布局done,}下面的官方的例子。FutureBuilder(future: _calculation, // a previously-obtained Future or nullbuilder: (BuildContext context, AsyncSnapshot snapshot) {switc
2022-02-03 17:17:04
449
原创 Flutter 可以缩放拖拽的图片,附安卓面经
}4对应代码,当details.scale==1.0,说明是一个移动操作,否则为了一个缩放操作void _handleScaleUpdate(ScaleUpdateDetails details) {…var offset =((details.scale == 1.0 ? details.focalPoint : _startingOffset) -_normalizedOffset * scale);…}获取到了图片的中心点之后,我们再根据Scale等到图片的整个区域Rect _ge
2022-02-02 15:53:25
563
原创 Flutter Stream 简介及部分操作符使用,移动架构师成长路线
void _stream() async{Duration interval = Duration(seconds: 1);Stream stream = Stream.periodic(interval, (data) => data);stream = stream.take(10); //指定发送事件个数await for(int i in stream ){print(i);}}Stream.takeWhile上面这种方式我们是只制定了发送事件的个数,如果我们也
2022-02-02 15:49:11
362
原创 EventBus的源码详解与架构分析,使用EventBus会造成什么弊端,带你复现整个思路历程
post(Object object);先看看初始化部分,看看如何实现单例的(可选的)。// volatile 这里是需要重视的,这个关键字保证了defaultInstance在不同线程间的可见性,也就是说在多线程环境下,看到的仍然是最新修改的值。static volatile EventBus defaultInstance;/** Convenience singleton for apps using a process-wide EventBus instance. */public .
2022-02-02 15:46:21
453
原创 EventBus源码解析一,安卓面试项目
1.3.2、EventBus的优点2、使用====2.1、引入依赖:implementation ‘org.greenrobot:eventbus:3.1.1’2.2、使用:/**Created by songzi522 on 2019/12/9.定义事件*/public class MyBusEvent {public final String message;public MyBusEvent(String message) {this.message =.
2022-02-02 15:44:56
140
原创 DrawerLayoutMenu使用详解,android内存优化方案
import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.Display;import android.view.MenuItem;import android.view.MotionEvent;import android.view.View;import android.view.WindowManager;public class
2022-02-02 15:43:31
108
原创 Dart 层如何 兼容 Android 和iOS平台特性 (1),Android开发前景怎么样
} else {result.notImplemented()}}}private fun isApplicationAvilible(packageName: String): Boolean {val installedPackages = packageManager.getInstalledPackages(0)if (installedPackages != null) {for (packageInfo in installedPackages) {if (packageInf
2022-02-02 15:42:06
702
原创 C语言printf打印的奥秘,android事件分发机制面试
十六进制表示:0X270F二进制表示:10 0111 0000 1111因为 9999 不超过4个字节,所以,你可以用 int 装,或 long 装,甚至可以用 short 装。C语言中常用的整数有 short、int 和 long 三种类型,通过 printf 函数,可以将它们以八进制、十进制和十六进制的形式输出。上节我们讲解了如何以十进制的形式输出,这节我们重点讲解如何以八进制和十六进制的形式输出,下表列出了不同类型的整数、以不同进制的形式输出时对应的格式控制符:二进制数、八进制数和十六进制数的
2022-02-02 15:40:41
1406
原创 java 枚举,2021谈一下当下最合适的Android架构
@param name - The name of this enum constant, which is the identifier used to declare it.@param ordinal - The ordinal of this enumeration constant (its position in the enum declaration, where the initial constant is assigned ..
2022-01-31 15:36:44
59
原创 IOS开发之——将项目运行到真机中,嵌入式音视频开发书籍
注册结果Your request could not be processed反馈结果3.4 注册结果说明按照正常流程注册时,会出现错误,官方并未给出失败原因及失败处理方案我们可以继续使用Apple ID进行开发四 Xcode管理Apple ID----------------------------------------------------------------------4.1 添加Apple ID打开Xcode开发工具,依次点击:Xcode——>Pref
2022-01-31 15:35:18
906
原创 Http协议解析,新鲜出炉的Android面试真题集锦我给你们整理出来了
但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。User-Agent头域User-Agent头域的内容包含发出请求的用户信息。**3、响应消息**响应消息的第一行为下面的格式:**HTTP-Version SP Status-Code SP Reason-Phrase CRLFHTTP-Version表示支持的HTTP版本** ,例如为HTTP/1.1。Status-Code是一个三个数
2022-01-31 15:33:54
1151
原创 Http与TCP区别,看这篇文章准没错
TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。 所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持住这个
2022-01-31 15:32:28
2668
原创 hook(2)Activity启动流程,2021年大厂Android岗面试必问
}效果:跳转依然正常,并且logcat中可以发现下面的日志.#####ok,插入自己的逻辑,成功##三. 第二种启动方式的hook方案创建ApplicationContextHookHelper.java,然后 同样是三步走:1.确定hook的对象和该对象的持有者锁定 ActivityThread的mInstrumentation成员.//1.主线程ActivityThread内部的mInstrumentation对象,先把他拿出来Class<?> ActivityT
2022-01-31 15:29:38
137
原创 HMS Core 5,面试必问知识点
查看详情地图服务:新增支持热力图图层绘制功能。以不同颜色标识地图上的点,这些点的集合使地图该区域以高亮的形式呈现。例如,您可以通过热力图功能展示交通拥堵情况,提醒用户躲避拥挤地区;“"规划驾车路径"功能中,新增支持距离优先、避免轮渡的规则,可以更加合理的设置路径规划方案;路径规划请求响应结果中,Route属性新增字段,可以更丰富的描述该路段是否有阶梯;新增支持设置Petal Maps Logo的位置,开发者可以根据需要调整Logo的显示位置。查看详情位置服务:POI
2022-01-31 15:28:13
134
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人