![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序员
文章平均质量分 88
m0_66264699
这个作者很懒,什么都没留下…
展开
-
Android开发中混淆后Gson序列化、反序列化的那些坑,androidstudio配置
为什么呢?因为反序列化创建对象本质还是利用反射, 会根据 json 字符串的 key 作为属性名称, value 则对应属性值.如何解决将序列化和反序列化的类排除混淆使用 @SerializedName 注解字段@SerializedName(parameter) 通过注解属性实现了序列化的结果中, 指定该属性 key 为 parameter 的值.反序列化生成的对象中, 用来匹配 key 与 parameter 并赋予属性值.一个简单的用法为public cl原创 2022-03-01 20:48:08 · 667 阅读 · 0 评论 -
Android开发Gradle高级技巧、自定义Gradle-Task、打包完成自动签名
flavorDimensions “versionCode”}// …//两种设备的渠道打包productFlavors {inches21 {buildConfigField(“String”, “INCHES_TYPE”, "“21"”)}inches32 {buildConfigField(“String”, “INCHES_TYPE”, "“32"”)}}}如上定义好了多渠道打包就只需要在Terminal执行Mac/Linux用户./gradlew assembleDe原创 2022-03-01 20:45:18 · 479 阅读 · 0 评论 -
Android应用开发之所有动画使用详解,安卓事件分发机制图解
如下就是一个动画始末速率较慢、中间加速的AccelerateDecelerateInterpolator插值器:public class AccelerateDecelerateInterpolator extends BaseInterpolatorimplements NativeInterpolatorFactory {…public float getInterpolation(float input) {return (float)(Math.cos((input + 1) * Math原创 2022-03-01 20:39:38 · 316 阅读 · 0 评论 -
Android应用开发--MP3音乐播放器代码实现(二),android原生开发框架
import android.content.Context;import android.database.Cursor;import android.provider.MediaStore;import com.wwj.sb.domain.Mp3Info;public class MediaUtil {/**用于从数据库中查询歌曲的信息,保存在List当中@return*/public static List getMp3Infos(Context context) {原创 2022-03-01 20:38:13 · 803 阅读 · 0 评论 -
Android应用保活方案的另类出路,让你应用长生不老,整理出Android逆向系列学习进阶视频
二、分析小米杀进程原理首先我们看看小米手机他的杀进程方案是啥,我们知道可以按系统的多任务菜单就可以很方便的杀死全部进程或者全部进程了:那么我们可以找到这个按钮,然后查看指定逻辑,我们这里可以通过UI工具找到id,然后去搜索,但是到哪搜索呢?其实这里有个知识点就是系统中的界面以及系统应用一般都在**/system/priv-app/这个目录下,我们可以直接进入这个目录查找指定应用,这里需要注意的是我们可能很容易认为应该是桌面应用也就是MiuiHome.apk** 这个应用,但是通过反编译查原创 2022-03-01 20:36:47 · 1881 阅读 · 0 评论 -
Android工程师,如何简单高效的学会smali语法,附答案解析
public AA methodAReturn(AA mAA, AA sAA) {return mAA;}AA aa= new AA();//调用methodAReturn(aa, aa);Smali代码.method public methodAReturn(Lcom/bolex/AA;Lcom/bolex/AA;)Lcom/bolex/AA;.registers 3.param p1, “mAA” # Lcom/bolex/AA;.param p2, “sAA” # Lc原创 2022-03-01 20:35:22 · 1499 阅读 · 0 评论 -
Android之TelephonyManager类的方法详解,不了解这些多线程的基础知识很难学懂Android
//请求位置更新,如果更新将产生广播,接收对象为注册LISTEN_CELL_LOCATION的对象,需要的permission名称为ACCESS_COARSE_LOCATION。location.requestLocationUpdate();/*** 获取数据活动状态** DATA_ACTIVITY_IN 数据连接状态:活动,正在接受数据* DATA_ACTIVITY_OUT 数据连接状态:活动,正在发送数据* DATA_ACTIVITY_INOUT 数据连接状态:活动,正在接受和发送数据原创 2022-02-18 14:34:47 · 323 阅读 · 0 评论 -
Android高级面试题之SDK源码分析:通过线程提升性能,你所不知道的Android原生开发的现状
public class MyAsyncTask extends AsyncTask<Void, Void, String> {@Override protected String doInBackground(Void… params) {…}@Override protected void onPostExecute(String result) {…}}}此代码段的缺陷在于,代码会将线程处理对象 MyAsyncTask 声明为某个 Activity 的非静原创 2022-02-17 20:46:37 · 924 阅读 · 0 评论 -
Android高级架构师整理面试经历发现?(大厂面经,flutter技术入门与实战
重点说三遍:算法很重要,算法很重要,算法很重要编程题一题分数一般20分左右,所以一定要多练练算法题。这里我整理了一些大厂面试经典高频的算法题,需要的可以到文章直接去领取!(需要的领取!不需要的可以跳过,谢谢支持文章)面试部分只写还记得的!###迅雷(android开发)一面:Java四大特征多态的原理jvm垃圾回收算法线程与进程的区别进程间通信ArrayList与LinkedList的区别Java线程间怎么实现同步,notify()与notifyAll()的区别什么是函原创 2022-02-17 20:45:12 · 91 阅读 · 0 评论 -
Android项目杰尼杰尼(极简番茄工作法)的学习准备之Android时钟,kotlin编程权威指南电子书
// y轴坐标为: 半径-特殊刻度长度-特殊刻度宽度(作为间距)-文字底部与基线的距离y = mRadius - mParticularlyScaleLength - mParticularlyScaleWidth - descent;canvas.drawText(h, 0, y, mTextPaint);h = “9”;fontWidth = mTextPaint.measureText(h);// y轴坐标为: -(半径-特殊刻度长度-特殊刻度宽度(作为间距)-文字长度/2(绘制原点在文字横原创 2022-02-17 20:43:47 · 237 阅读 · 0 评论 -
Android面试:项目创建了几百个线程,你要怎么优化,面试官必问的技术问题之一
)}@JvmStaticfun newScheduledThreadPool(corePoolSize: Int,threadFactory: ThreadFactory?): ScheduledExecutorService {return BaseScheduledThreadPoolExecutor(corePoolSize, threadFactory)}}对于某些线程池确实没啥问题,但当你继续写下去时,会出问题,比如:@JvmStaticfun newSingleThrea原创 2022-02-17 20:40:57 · 1164 阅读 · 0 评论 -
Android面试:Handler八大问题汇总,kotlin开发微信
public void run() {Looper.prepare();Handler handler=new Handler();handler.post(new Runnable() {@Overridepublic void run() {}});Looper.loop();}});上面在Thread中使用handler,先执行Looper.prepare方法,来在当前线程中生成一个Looper对象并保存在当前线程的ThreadLocal中。 看下Looper.prepare()原创 2022-02-17 20:39:32 · 137 阅读 · 0 评论 -
Android面试太难了?除了闷头刷题,程序员应该了解的面试技巧才是关键
Android笔试面试指南基础知识篇虚拟机相关知识基础虚拟机的内存管理虚拟机的垃圾回收虚拟机的种类:Java虚拟机、Android两种虚拟机的对比class与dex文件Class加载Java基础尤其需要深入理解容器、I/O、线程、反射、泛型等。尤其是容器的源码实现。Kotlin基础这里推荐:Bennyhuo的视频《Kotlin系统入门与进阶》数据结构与算法基本的数据结构基本的排序算法算法的时空复杂度操作系统基础和计算机网络操作.原创 2022-02-17 20:36:42 · 216 阅读 · 0 评论 -
Android面试反思:开发5年crud背景,惨遭字节阿里双挂,Android已死
TextView的绘制流程 怎么处理换行性能优化都做了哪些Shareperference实现机制插件化原理ViewRootImpl都做了哪些事情都有哪些window类型 内部是怎么处理window不同权限的算法:给定一个数N 如23121 给定一组数字A如{2,4,9}; 求由A中元素组成的、小于N的最大数,如小于23121的最大数为22999涂鸦智能(现场面试两轮)一面讲一下Handler消息机制项目中都做了哪些性能优化讲一下绘制流程 ..原创 2022-02-17 20:35:17 · 451 阅读 · 0 评论 -
Android面试Kotlin高阶之必问三连,flutter与android混合开发
Kotlin 编译器会将内联函数中的代码在编译的时候自动替换到调用它的地方。分两步:1、Kotlin编译器将Lambda表达式中的代码替换到函数类型参数调用的地方2、将内联函数中的全部代码替换到函数调用的地方问:Kotlin中委托类和委托属性答:委托是一种设计模式,基本理念是:操作对象自己不会去处理某段逻辑,而是会把工作委托给另一个辅助对象去处理实现。**委托类:**如:我们要自己实现一个Set数据结构的实现类MySet//将MySet的具体实现交给HashSetclass MySet(val原创 2022-02-17 20:33:52 · 185 阅读 · 0 评论 -
AutoTextView实现文字自动翻转效果,移动app开发
TextView t = new TextView(mContext);// t.setGravity(Gravity.CENTER);t.setTextSize(mHeight);// t.setTextColor(Resources.getSystem().getColor(android.R.color.black));t.setTextColor(mContext.getResources().getColor(R.color.white));t.setText原创 2022-02-16 16:07:53 · 176 阅读 · 0 评论 -
AS自定义模板,效率提升的不是一星半点,android开发入门到精通
该文件可以定义如下常用的标签:copy:复制文件到目标目录,可以用于将图标复制到项目的文件夹。merge:合并,可以用于将文件和项目中现有的文件合并。instantiate:通过FreeMarker将ftl文件中的变量都转换成对应的值,并且生成我们想要的文件。open:在代码生成后,打开指定的文件。FreeMarker是一个模板引擎,它可以用来生成输出文本(例如:HTML网页、电子邮件、配置文件、源代码等)的通用工具,如下图所示:FreeMarker的工作原理,如下图所示:原创 2022-02-16 16:06:28 · 210 阅读 · 0 评论 -
ASP,嵌入式音视频开发
2、 新建test数据库,在test数据库中新建book_info表,结构如下:并向表中插入两条记录,两条记录中image_path字段的值分别为a.jpg和e.jpg在网站中的路径。3、 新建Gridview.aspx页面,通过GridView控件按照下面的格式显示book_info中的数据:当用户单击“详细信息”时(在超链接中显示“详细信息”不需设置HyperLinkField的“DataTextField”属性,只需设置”Text”属性的值为”详细信息”就行),导航到de原创 2022-02-16 16:05:03 · 193 阅读 · 0 评论 -
ASP标准MD5加密签名函数代码,Android开发中常见的一些问题面试专题
’ * 说明:’ * 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。’ * 该代码仅供学习和研究聚合支付接口使用,只是提供一个参考。’ */Private Const BITS_TO_A_BYTE = 8Private Const BYTES_TO_A_WORD = 4Private Const BITS_TO_A_WORD = 32Private m_lOnBits(30)Private m_l2Power(30)Pri原创 2022-02-16 16:03:38 · 1990 阅读 · 0 评论 -
ArchTaskExecutor 源码分析,flutter图片压缩库
从源码中还发现有 mDelegate 和 mDefaultTaskExecutor,其中 mDelegate 是 ArchTaskExecutor 实现的代理类,承担功能的具体实现。mDefaultTaskExecutor 是已实现的默认线程池代理类,mDelegate 默认被赋予 mDefaultTaskExecutor 的实例,同时支持外部自定义实现线程池。public class ArchTaskExecutor extends TaskExecutor {…//设置自定义的线程池public原创 2022-02-16 16:02:13 · 174 阅读 · 0 评论 -
Android自定义控件开发入门与实战(12)Canvas,android开发蓝牙传数据
在saveLayer之前就用绿色画笔填充了背景,效果如下:那么如果这个时候我们把saveLayer函数去掉,会发生什么呢?@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawColor(Color.GREEN);canvas.drawBitmap(dstBmp, 0, 0, mPaint);mPaint.setXfermode(new PorterDuffXfermode(PorterD原创 2022-02-15 15:55:24 · 238 阅读 · 0 评论 -
Android脱壳之整体脱壳原理与实践,【2021Android最新学习路线
art::DexFile是加载dex绕不开的类,不论是使用BaseClassLoader,还是自定义类加载器,最终都需要art::DexFile,这一结论可以通过查阅class_linker.cc文件中的函数得到,像ClassLinker::DefineClass,ClassLinker::LoadMethod,ClassLinker::LoadClassMembers这些重量级函数都需要以DexFile对象做为参数:通过BaseDexClassLoader来加载类会执行art/runtime/na原创 2022-02-15 15:52:34 · 3619 阅读 · 1 评论 -
Android程序媛:文科转码,记录我在字节跳动这一年,idea搭建android开发环境
第一天上班的时候,我感到非常新奇和不可思议,我竟然真的成为了一名Android程序员,坐在工位上写代码都在窃喜。与字节结缘2020 年上半年的时候,刚复工没多久,我又一次选择了裸辞。或许出于对自己非科班出身的介怀,又或许只是想踏踏实实接受比较系统的计算机相关知识的学习,前一年的时候我就又一次萌生了考计算机研的想法,把操作系统、计算机网络、数据结构、计算机组成原理四件套都恶补了个遍。总之我又想脱产学习了。4 月中旬的时候,我又成为了一名光荣的无业游民。当时告诉自己,冲一波大厂,不行的话就去考研,.原创 2022-02-15 15:49:44 · 206 阅读 · 0 评论 -
Flutter笔记(9)flutter中baseline基准线布局,android系统移植和驱动开发
| — | — | — || baseline | double | baseline数值,必须要有,从顶部算。 || baselineType | TextBaseline | baseline类型,也必须要有的,目前有两种类型,alphabetic对齐字符底部的水平线,ideographic对齐表意字符的水平线 |baseline的构造函数const Baseline({Key key,@required this.baseline,@required this.baselineType原创 2022-02-05 13:43:27 · 481 阅读 · 0 评论 -
Flutter开发之——可滑动组件,Android面试题中高级
_gridViewController = ScrollController()…addListener(() {print(’${_gridViewController.position}’);});}//Widget build(BuildContext context)GridView(controller:_gridViewController,gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount原创 2022-02-05 13:42:02 · 138 阅读 · 0 评论 -
Flutter开发之——Menu,android基础面试题
required this.child,})3.2 属性说明| 属性 | 说明 | 取值 || :-: | :-: | :-: || value | 当此项选中后,此值将会通过onSelected返回 | T || enabled | 此项是否可用 | bool || height | 此项的高度 | double || textStyle | 文本样式 | TextStyle || child | 子控件 | Widget |四 PopupMenuDivider4.1 源码con原创 2022-02-05 13:40:37 · 108 阅读 · 0 评论 -
Flutter开发之——IOS通信MethodChannel,2021届毕业生还没找到Android开发工作
@objc class AppDelegate: FlutterAppDelegate {override func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {GeneratedPluginRegistrant.register(with: self)let con原创 2022-02-05 13:39:12 · 2526 阅读 · 0 评论 -
Flutter原理:三棵重要的树(渲染过程、布局约束,flutterlistview原理复用
每次,当控件挂载到控件树上时,Flutter 调用其 createElement() 方法,创建其对应的 Element。Flutter 再将这个 Element 放到元素树上,并持有创建它控件的引用,如下图:控件会有它的子树:子控件也会创建相应 Element 被放在元素树上:4Element 中的状态我们上文提到了 Widget 的不可变性,相应的 Element 就有其可变性,正如我们前文所说的它被标记为 dirty Element 便是作为需要更新的状态,另外一个我们需要格外注意的是,原创 2022-02-05 13:36:22 · 2801 阅读 · 0 评论 -
Flutter-性能优化:图片占位符、预缓存和禁用导航过渡动画
if (wasSynchronousLoaded) {return child;} else {return AnimatedSwitcher(duration: const Duration(milliseconds: 500),child: frame != null ? child : placeholder,);}},);}}有了占位符,布局再也不会跳来跳去了,而且图片也有了渐现效果:在 DartPad 中查看完整例子预缓存图片如果你的 app 在显示图片界面之前原创 2022-02-05 13:32:07 · 243 阅读 · 0 评论 -
Flutter嵌套深?扩展函数了解一下,android面试题解析
实际上从dart 2.6.0就开始支持扩展函数了如果pubspec.yaml中设置的dart版本低于2.6.0则会出现警告提示如:environment:sdk: “>=2.1.0 ❤️.0.0”警告提示:Extension methods weren’t supported until version 2.6.0先来定义一个扩展函数extension WidgetExt on Widget {Container intoContainer({//复制Container构造函数的所原创 2022-02-04 14:33:01 · 104 阅读 · 0 评论 -
Flutter37,2021我的Android路要怎么走
userInfo.expertise = map[‘expertise’];userInfo.joinTime = map[‘joinTime’];userInfo.lastLoginTime = map[‘lastLoginTime’];userInfo.portrait = map[‘portrait’];userInfo.fansCount = map[‘fansCount’];userInfo.favoriteCount = map[‘favoriteCount’];userInfo.f原创 2022-02-04 14:27:21 · 61 阅读 · 0 评论 -
Flutter-性能优化:图片占位符、预缓存和禁用导航过渡动画
有了占位符,布局再也不会跳来跳去了,而且图片也有了渐现效果:在 DartPad 中查看完整例子预缓存图片如果你的 app 在显示图片界面之前有欢迎界面,你可以调用 precacheImage 方法来预缓存图片。precacheImage(NetworkImage(url), context);来看一下效果:在 DartPad 中查看完整例子在 Flutter web app 中禁用导航过渡动画导航过渡动画一般在用户切换页面时使用,在移动 app 中,这种方式可原创 2022-02-04 14:25:56 · 1646 阅读 · 0 评论 -
Flutter-VS-Kotlin-跨平台开发市场的最终霸主究竟花落谁家
重用业务逻辑的确,它不是第一个让开发人员能够分离业务逻辑和 UI 的工具。像 Xamarin 和 React Native 那样的各种跨平台框架都已经提供了这种服务。但让 Kotlin Multiplatfrom 与众不同的是,它在 UI 层下采用了共享的逻辑和库。这使移动应用程序开发人员可以与原生环境——包括 iOS 的 Swift 和 XCode、Web 上的 JavaScript 和 Android 的 Kotlin 和 Android Studio——来交互,而无需使用任何桥接手段,并以更加原生原创 2022-02-04 14:24:31 · 218 阅读 · 0 评论 -
EventBus核心原理其实保存这三张图就可以弄懂了,收藏一下
EventBus.getDefault().post(new Event1());这个时候,activity中的onEvent1就会收到事件。下面引入第一幅图:如图所示,一个Subscribe对应多个Event,Subsribe就是上面通过register方法注册的对象,比如activity。这幅图对应EventBus中一个Map结构:private final Map<Object, List<Class<?>>> typesBySubscriber;Even原创 2022-02-04 14:21:41 · 225 阅读 · 0 评论 -
EventBus使用详解,android混合开发专利
使得代码更简洁,避免出现复杂的依赖性和生命周期问题体积小(大概只有50k 的 jar包)EventBus的使用:AS中添加gradle依赖:dependencies {implementation ‘org.greenrobot:eventbus:3.1.1’}如果你的应用app发布打包时开启了混淆,则需要在proguard-rules.pro中添加对应的混淆规则:-keepattributes Annotation-keepclassmembers class ** {@o..原创 2022-02-04 14:20:16 · 1852 阅读 · 0 评论 -
HTTP和HTTPS的区别,SSL的握手过程,kotlin协程异常
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。HTTPS和HTTP的区别主要如下:1、https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。2、http是超文本传输原创 2022-02-03 17:46:12 · 113 阅读 · 0 评论 -
HEVC与AVC的区别与联系(十二),Android面试题集锦在这里
H.265是基于H.264技术加以优化后的视频编码标准,在保留H.264技术特性的同时,进一步改善了码流、编码质量、延时和数据算法之间的关系,性能相对更强。在1080P为极致观影追求的时代,H.264是最理想的解码方式,而随着4K成为行业大趋势,H.265才是其最理想的搭档。三、H.265和H.264的区别1.H.265是新的编码协议,也即是H.264的升级版。H.265标准保留H.264原来的某些技术,同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关原创 2022-02-03 17:44:47 · 1064 阅读 · 0 评论 -
hdoj 1014 Divding(03背包问题),kotlin登录实例
Sample OutputCollection #1:Can’t be divided.Collection #2:Can be divided.题意:给出6种物品价值分别1~6,每种物品都有一定的数量问能不能将这些物品分成两半 两半的价值相等别人的思路:是一个多重背包问题,相当于背包称重固定,物品件数有限,把物品将背包刚好塞满。数据较大 用bool的类型来写起点为s/2(s为总价值), 若s为奇数则不能分成两半dp[i]=1 表示可以将物品凑成价值i,若dp[s/2]则原创 2022-02-03 17:43:22 · 851 阅读 · 0 评论 -
HashMap 如何解决冲突?扩容机制?,androidwifi密码
hashes that vary only in bits above the current mask willalways collide. (Among known examples are sets of Float keysholding consecutive whole numbers in small tables.) So weapply a transform that spreads the impact of higher bitsdownward. T..原创 2022-02-03 17:41:58 · 996 阅读 · 1 评论 -
IOS开发之——事件处理-抽屉效果(70),Android核心知识点
[self.view addSubview:mainView];_mainView=mainView;}3.2 滑动视图处理-(void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{//获取UITouch对象UITouch *touch=[touches anyObject];//获取当前点CGPoint currentPoint=[touch locationInView:self.v原创 2022-02-02 16:23:58 · 99 阅读 · 0 评论