- 博客(112)
- 收藏
- 关注
原创 Android应用AsyncTask处理机制详解及源码分析,移动互联网开发
Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知识点。前面我们分析了Handler异步机制原理(不了解的可以阅读我的《Android异步消息处理机制详解及源码分析》文章),这里继续分析Android的另一个异步机制AsyncTask的原理。当使用线程和Handler组合实现异步处理时,当每次执行耗时操作都创建一条新线程进行处理,性能开销会比较大。为了提高性能我们使用AsyncTask实现异步处理(其实也是线程和handler组合实现),因为其内部使用了java提供的线
2021-12-11 12:35:07 310
原创 Android客户端HTTP请求服务端Servlet,app启动优化策略
PrintWriter out = response.getWriter();String name = request.getParameter(“username”);if(name!=null&&!"".equals(name)){String result = “”"+name+""";out.write("{“name”:"+result+"}");return;}}public void doPost(HttpServletRequest request, Htt
2021-12-11 12:30:24 3258
原创 Android技术栈(二)组件化改造,作为Android程序员
public final class PR{public static final class navi{public static final String navi = “/navi/navi”;public static final String location_service = “/navi/location”;}public static final class ai{public final static String tts_service = “/ai/tts”;pu
2021-12-10 15:33:26 968
原创 Android手机平板两不误,使用Fragment实现兼容手机和平板的程序
下面我们来实现久违的 MenuFragment,新建一个 MenuFragment 类继承自 Fragment,具体代码如下:public class MenuFragment extends Fragment implements OnItemClickListener {/**菜单界面中只包含了一个ListView。*/private ListView menuList;/**ListView的适配器。*/private ArrayAdapter adapter;/**...
2021-12-10 15:31:54 1375
原创 Android开发如何准备技术面试,android视频开发框架
想必大家现在经常能看到某某公司又裁员了,会担心是不是找不到工作了。其实总的来说虽然当下的环境确实不怎么好,但是有裁员的公司,也肯定有招人的公司,并且招人的公司一定比裁员的公司多得多。那么再来回答这个问题「当下好不好找工作」。对于技术好的人来说,永远不会担心这个问题。但是对于技术不那么好的人来说,确实需要一些技巧才能比别人有更多的机会。比如说写一封清晰明了的简历,在面试前好好准备等等。总的来说,机会是留给有准备的人。无论环境好与差,认真准备的你肯定会比别人有更多的机会。二、如何写简历![](http
2021-12-10 15:23:50 1306
原创 Android开发7年,疫情期间八家大厂高工的面试经历和真题整理
让我宽慰的是,父母、包括我的岳父母和我的妻子,都给了我最大程度的鼓励和支持。让我找回重新开始的信心。疫情封城、隔离的期间,我在家复习、准备面试找工作。岳父岳母来到了家里照顾我妻子(妻子家里是杭州本地的,我的父母回了乡下过年)面试经历复习了两个月左右。四月中旬开始边投简历边进行复习扫尾、巩固,大大小小的公司投出了大概三四十份简历。收到面试大概20场。下面我挑了几个较好的和一些大厂的真题面经分享一下。小建议:面试某家公司前,最好是要先了解你所面试的工作岗位,公司的业务,主要是做哪个方面的,这样可以更加
2021-12-10 15:21:37 1448
原创 Android应用的资源,吊打面试官
| /res/raw/ | 存放任意类型的原生资源(如音频文件,视频文件) || /res/lvalues/ | 存放各种简单值的xml文件。这些简单值包括字符串值,整数值,颜色值,数组等 |使用资源在Android应用中使用资源可分为在Java代码和XML文件中使用资源,其中Java代码用于为Android应用定义四大组件,而XML文件则用于为Android应用定义各种资源。1.在Java代码中使用资源清单项2.在Java代码中访问实际资源3.在XML文件中使用资源字符串,颜色,尺寸资源
2021-12-10 15:20:01 352
原创 Android常见问题及开发经验总结(四),flutter跳转页面
答:1)有些情况压缩会失真2)有些设备 分辨率比较特殊但是我个人建议 用一套大图放到xxhdpi下面,原因是1.除了一些不规则的圆角之类的非.9图片因为从大图压小会造成圆角变小,其他的图片基本上都可以从高dpi压缩到低dpi使用。所以只维持一套drawable-xxhdpi资源就可以了,特殊的图片才分多个资源放不同的dpi目录。这样会省掉大量的UI适配时间。2.放一套drawable-hdpi的资源适配hdpi的机器效果也很一般,效果没有多大提升。3.放一套这样适配也可以减少apk大小。除非你是
2021-12-10 15:15:25 369
原创 Android应用优化之最基本的UI层显示优化,你值得拥有
这样就可以通过颜色的判断,我们检查对应的布局代码来优化过度绘制问题。2.Layout Inspector.Android Studio有自带的视图分析工具 Layout Inspector(布局检查器),打开方式菜单栏Tools–> Layout Inspector。可以看到Layout Inspector最右侧的属性栏可以查看每一个View的所附带的属性及属性值。3.接下来我们主要分析以下三个问题:【问题1】没有用的父布局通过工具和查看代码,看看是否能把某Layout子View放到
2021-12-09 11:37:20 235
原创 Android屏幕适配,android开发实战pdf
如何解决这种问题有一下几点:dp vs 百分比那么dp究竟解决了适配上的什么问题?可以看出1dp = 1/160inch;那么它至少能解决一个问题,就是你在布局文件写某个View的宽和高为160dp*160dp,这个View在任何分辨率的屏幕中,显示的尺寸大小是大约是一致的(可能不精确),大概是 1 inch * 1 inch。但是,这样并不能够解决所有的适配问题:呈现效果仍旧会有差异,仅仅是相近而已当设备的物理尺寸存在差异的时候,dp就显得无能为力了。为4.3寸屏幕准备的UI,运行在5.0寸的屏
2021-12-09 11:35:49 116
原创 Android实现Rxjava2+Retrofit完美封装,八年Android开发心路历程
}});loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);File cacheFile = new File(Utils.getContext().getCacheDir(), “cache”);Cache cache = new Cache(cacheFile, 1024 * 1024 * 100); //100Mbreturn new OkHttpClient.Builder().readTimeout(Consta
2021-12-09 11:32:22 273
原创 Android完全退出应用程序 ,【Android面试题】
activity.finish();activityStack.remove(activity);activity = null;}}//获得当前栈顶Activitypublic Activity currentActivity() {Activity activity = null;if(!activityStack.empty())activity= activityStack.lastElement();return activity;}//将当前Activity推入栈中pu
2021-12-09 11:30:07 260
原创 Android太太太太太卷了,累了,android开发入门与实战体验
但这并不是一件容易的事,很多Android程序员学的时候就是这儿学一点,那儿学一点,不是特别系统,这就导致他们的技术基础薄弱,对于大厂真正想要什么也不清楚,再加上他们周遭远不如大厂的成长环境,想要仅靠自己的力量持续成长、突破困境就好像雾里寻路,困难重重,也很容易半途而废。这边整理了一个对标阿里 60W年薪企业高级移动架构师成长路线,由于图片太大仅展示大标题,有需要的朋友移步文末获取完整版:在Android开发领域,早在16年末,就有人说到Android岗位趋近于饱和,招聘要求越来越严苛,至于现在更是
2021-12-09 11:27:45 1778
原创 Android基础进阶 - 消息机制 之Native层分析,Android面试回忆录
synchronized (this) {msg.markInUse();msg.when = when;Message p = mMessages;boolean needWake;//如果消息链表为空,或者插入的Message比消息链表第一个消息要执行的更早,直接插入到头部if (p == null || when == 0 || when < p.when)《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》【docs.qq.com/doc/DS
2021-12-09 11:23:56 847 1
原创 Android启动页黑屏原理解析,以及最优解决方案,安卓面试项目包装
将APPTheme设定为启动的Activity的主题,即可禁止Preview Window,当然,也有人通过把preview window设置为全透明,也达成了类似的效果。结果就是,当你点击APP时,界面会无响应一段时间,然后进入APP。我个人强烈不推荐这么做,因为Android想方设法提升的用户体验一下子被你打回解放前。方案二:自定义Preview Window具体方法如下:style.xlm同样将主题设置到启动的Activity的主题中,windowBackground就是即将展示的p.
2021-12-09 11:21:37 231
原创 Android原生系统真的那么好用吗?安卓原生系统吊打其他系统,因为有Google-Play
Android原生系统真的那么好用吗?这种问题当然是否定的。原生 Android(指的是直接基于 AOSP 构建的而非手机厂商出厂固件修改的第三方 ROM,但包括 Nexus/Pixel 或其它被 Google 直接支持的手机的可能是闭源的出厂固件)对于适合的人而言是无可替代的,当前几乎无任何定制 ROM 就与之相比。但是对于更多的中国用户而言,他们从一开始就使用的是定制系统,已经习惯了那一套逻辑和对系统的认知,所以定制系统是更好的选择(但您们最好祈祷一下手机厂商的 ROM 不要越来越不要脸)。当然.
2021-12-09 11:19:20 8627
原创 Android-Notes|BottomNavigationView-爱上-Lottie,kotlin声明数组
selected: 选中才显示标题;labeled: 标题一直显示;unlabeled: 只显示 icon,不显示标题。2. Lottie对于这个东东,不知道说啥。忽略吧。想起来都是累,韩总让我自己折腾 Lottie json 文件。哭唧唧安利一个在线编辑 Lottie json 文件的地址:lottiefiles.com/editor实战部分Step 1:导入提供的 Lottie Json 文件新建 assets 目录,这里我做了 Android 10 深色兼容,所以需要提供深.
2021-12-08 15:09:57 425
原创 Android-MotionLayout动画:续写ConstraintLayout新篇章,android启动流程
本文属于入门级别,重点在于扫盲和入门。如果对你有用,欢迎点赞。个人能力有限,有些东西可能理解不透或不对,欢迎指正,非常感谢。配置需要将ConstraintLayout的版本升级到2.0+。AndroidX:implementation ‘androidx.constraintlayout:constraintlayout:2.0.0-beta8’支持库:implementation ‘com.android.support.constraint:constraint-layout:2.0.0-b
2021-12-08 15:08:26 448
原创 Android-App-启动优化全记录,hashmap和concurrenthashmap的区别
控制线程数量 – 线程池检查线程间的锁 ,防止依赖等待使用合理的启动架构微信内部使用的 mmkernel阿里 Alpha系统调度优化应用启动的时候,如果主线程的工作过多,也会造成主线程过于繁忙,下面几个系统调度相关的点需要注意:启动过程中减少系统调用,避免与 AMS、WMS 竞争锁。启动过程中本身 AMS 和 WMS 的工作就很多,且 AMS 和 WMS 很多操作都是带锁的,如果此时 App 再有过多的 Binder 调用与 AMS、WMS 通信,SystemServ..
2021-12-08 15:05:00 352
原创 Android-10分区存储介绍及百度APP适配实践,android游戏开发大全第二版代码
分区存储存在一定的适配成本,Google为Android10版本提供了过渡方案,设置应用以兼容模式运行(详见2.3), Android11将不再支持该行为, 各应用需要在Android11发版之前完成分区存储适配工作分区存储新特性介绍丨1. 分区存储概览1.1 分区存储新特性对外部存储进行了重新设计,外部存储被分为应用私有目录以及共享目录两个部分(1)应用私有目录:存储应用私有数据,外部存储应用私有目录对应Android/data/packagename,内部存储应用私有目录对应data/data/
2021-12-08 15:02:45 3180
原创 Android 项目国际化 多国语言适配,35岁程序员
英语(美国):values-en-rUS英语(英国):values-en-rGB英文(澳大利亚):values-en-rAU英文(加拿大):values-en-rCA英文(爱尔兰):values-en-rIE英文(印度):values-en-rIN英文(新西兰):values-en-rNZ英文(新加坡):values-en-rSG英文(南非):values-en-rZA阿拉伯文(埃及):values-ar-rEG阿拉伯文(以色列):values-ar-rIL保加利亚文: v
2021-12-08 15:00:22 205
原创 Android 面试必备 - 系统、App、Activity 启动过程,持续更新中
Android 面试必备 - 计算机网络基本知识(TCP,UDP,Http,https)Android 面试必备 - 线程Android 面试必备 - JVM 及 类加载机制Android 面试必备 - 系统、App、Activity 启动过程Android_interview github 地址Android 系统启动过程从系统层看:linux 系统层Android系统服务层Zygote从开机启动到Home Launcher:启动bootloader (小程
2021-12-08 14:56:34 147
原创 Android 面试必备 - JVM 及 类加载机制,flutter瀑布流
本地方法栈(Native Method Stacks)该区域与虚拟机栈所发挥的作用非常相似,只是虚拟机栈为虚拟机执行Java方法服务,而本地方法栈则为使用到的本地操作系统(Native)方法服务。Java堆(Java Heap)Java Heap是Java虚拟机所管理的内存中最大的一块,它是所有线程共享的一块内存区域。几乎所有的对象实例和数组都在这类分配内存。Java Heap是垃圾收集器管理的主要区域,因此很多时候也被称为“GC堆”。根据Java虚拟机规范的规定,Java堆可以处在物理上不连续的内
2021-12-08 14:54:15 120
原创 AndroidStdio 关于课程表的小项目,GitHub标星3.2K
updateListView(new String[]{“tip”,“time”},new String[]{“提醒时间”,a},position);sd.updateValue(“Data”,“5-6”,a);dialog.dismiss();}}).show();}//设置主题public void settheme(final int position) {new AlertDialog.Builder(SetTime.this).setTitle(“请设置主题风格”).setSi
2021-12-07 11:26:37 180
原创 Android-面试官:View-post()-为什么能够获取到-View-的宽高-?,flutter弹窗效果
Activity 的启动流程就不赘述了,之前写过一篇裹脚布式的文章,庖丁解牛 Activity 启动流程 ,感兴趣的可以看看。这里直接跳到 ActivityThread.performLaunchActivity() 方法。ActivityThread.javaprivate Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {…// 获取 ComponentNameComponentName
2021-12-07 11:25:06 177
原创 Android-适配各国语言、屏幕尺寸、系统版本及常见适配方法总结,android简易计算器代码
首先,说一说这个分别率的问题。在项目开发的过程中有一个重要的合作是与UI设计师的图片大小分别率的沟通。例如,UI设计师实现步骤:①在coreldraw或者Sketch中制作好“矢量图标“ ;②保存输出为“PNG位图图片”,单位是px;③设置图标的内外边距,此时的边距单位是px;当开发者拿到图后,会遇到这样一个问题:内外边距是由px为单位的距离,但是在实际开发中“dp”做为单位的更加常见,所以就会涉及到“px”“dp”互转的问题。对bitmap根据屏幕的分别率找到资源目录下的密度文件夹。参考下表:比如
2021-12-07 11:23:11 163
原创 Android-设置PullToRefresh下拉刷新样式,大厂面试题汇总
可以在布局文件中设置自定义的这些样式,使用方法如下:<com.handmark.pulltorefresh.libaray xmlns:ptr=“http://schemas.android.com/apk/res-auto”android:id="@+id/lv"《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》【docs.qq.com/doc/DSkNLaE...
2021-12-07 11:21:39 83
原创 Android-搭建简单服务端+ListView异步加载数据,移动设备开发应用专业
创建好Web项目之后,我们在电脑上测试一下,在浏览器输入地址:http://192.192.8.233:8080/Test/list.xml看到以上内容,说明我们已经可以访问到我们的服务端了,下面我们就可以开发我们的客户端:我这里创建了一个07_DataAsyncLoad的项目:目录结构如下:因为需要联网,在AndroidManifest.xml设置权限:根据服务端list.xml,我们需要定义一个实体类:/07_DataAsyncLoad/src/com/wwj/domain/Co.
2021-12-07 11:19:23 487
原创 Android-字节跳动技术二面:程序运行时,内存到底是如何进行分配的
操作数栈操作数栈(Operand Stack)也常称为操作栈,它是一个后入先出栈(LIFO)。同局部变量表一样,操作数栈的最大深度也在编译的时候写入方法的 Code 属性表中的 max_stacks 数据项中。栈中的元素可以是任意Java数据类型,包括 long 和 double。动态链接动态链接的主要目的是为了支持方法调用过程中的动态连接(Dynamic Linking)。在一个 class 文件中,一个方法要调用其他方法,需要将这些方法的符号引用转化为其所在内存地址.
2021-12-07 11:14:48 301
原创 Android-FragmentPagerAdapter刷新无效的解决方案,快来收藏
private SparseArray mFragmentPositionMap;private SparseArray mFragmentPositionMapAfterUpdate;public BaseFragmentPagerAdapter(FragmentManager fm, List fragments) {super(fm);mFragmentList = fragments;mFragmentManager = fm;mFragmentList = fragments;mFr
2021-12-07 11:13:12 1255
原创 Android---教你如何用三十分钟在安卓上开发一个微笑抓拍神器,作为一名Android面试者你应该知道的
dependencies{// 引入基础SDKimplementation ‘com.huawei.hms:ml-computer-vision:1.0.2.300’// 引入人脸检测能力包implementation ‘com.huawei.hms:ml-computer-vision-face-recognition-model:1.0.2.300’}1.3 在AndroidManifest.xml文件里面增量添加模型自动下载这个主要是用来模型更新的,后面算法有了优化,可以自动下载到手机里
2021-12-07 11:10:53 975
原创 Android开发面试之RxJava,flutterandroidx支持
Log.d(TAG, “onComplete”);}});相信这是最简单的事件发送的示例,这没什么好说的,那它们是怎么发送数据,接收数据的呢,下面我会把代码拆分来看,因为现在是链式调用,我把代码拆分如下:订阅过程这里把创建observable和observer、以及发起订阅分别拆开来写,后面方便我们分析代码,首先是第一步发起订阅observable.subscribe(observer):@Overridepublic final void subscribe(@NonNull Observ
2021-12-06 02:55:13 393
原创 Android开发第5年做了一个产品,被黄晓明,angelbabay,字节跳动算法工程师总结
且慢,别打我,让我先说完,俗话说的好,有图有真相,无图言D好了,有图有真相了。我们来谈谈正事,事情是这样的:2015年的时候,我在北京一家孵化器公司上班,薪水相当ok,公司管理,老大也相当ok,而我负责整个Android团队,在开始阶段虽然很忙,但好在自己能力还算不错,老大交代的任务都能按时按质的完成。唯一的缺点,则是技术上并没有一个质的飞跃。公司当时的业务模式是: 如果你有足够的钱和一个不错的想法,就可以将这个项目放到我们公司进行孵化,我们负责产品的研发,推广和后期的运营,一旦项目走上
2021-12-06 02:51:46 579
原创 Android开发前景及现状分析,html5向右移动代码
1.Android平台优势1.1 平台开放性1.2 硬件的丰富性1.3 开发便捷性1.4 Google应用的无缝结合性1.5 安全性2.Android的市场前景2.1 手机等移动终端用户激增,为Android系统的广泛应用提供了用武之地。2.2 手机厂商和运营商的大力支持和应用2.3 从Android平台的优势中也可以看出Android广阔的市场前景2.4 从用户角度来说:Android系统也具有竞争优势2.5 Android符合linux发展趋势 Android系统未来前景大好,发展
2021-12-06 02:49:31 296
原创 Android开发Gradle高级技巧、自定义Gradle-Task、打包完成自动签名
android {defaultConfig {//多渠道打包flavorDimensions “versionCode”}// …//两种设备的渠道打包productFlavors {inches21 {buildConfigField(“String”, "INC《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享HES_TYPE", "“21"”)}i
2021-12-06 02:47:08 808
原创 Android应用的保活方案以及另类出路,你了解几个,看完不会的来打我
前言我们在做Android应用的时候都知道,必须要有一套好的保活方案,这样应用的push到达率高,应用的活跃度也就很高,我们平时也可以发现很多应用我们明明已经关闭了,但是还是可以接收到push消息,或者ps查看进程还是存在的。当然现在已经有很多方案在做这件事了,但是有一个问题就是像微信中及时接受消息的应用如果系统把他强杀之后接收不到消息,用户也是要疯掉的,所以系统厂商会给出一个白名单有一些应用是不会强杀的。一一、常见保活方案**1、监听广播:**监听全局的静态广播,比如时间更新的广播、开机广播、
2021-12-06 02:44:55 1176 1
原创 Android实现高德地图轨迹回放,android开发遇到的技术难点
写在前面准备官方文档解读创建应用:地图api引入:权限添加效果展示过程实现地图初始化定位显示标记点点平滑移动添加呼吸点写在结尾写在前面=================================================================本篇文章是对近期工作项目中集成高德地图轨迹回放和单/多点标记功能的一个总结。方便以后使用时翻阅,也方便大家,避免跟我踩一样的坑欢迎指正,不喜勿..
2021-12-06 02:41:00 2164 4
原创 Android自定义组合View简单示例,android混合开发弊端
这里根布局是merge,不是通常的LinearLayout或其他ViewGroup,因为你所自定义的组合view就是一个ViewGroup,在xml中根布局能减少还是要减少的,少了一层嵌套,它不香吗,至于你需要在根布局设置的属性如水平垂直或重心等,你可以在你自定义的View中设置,请往下看二、new 你需要的组合view 重写构造函数class CustomViewGroup: LinearLayout {constructor(context: Context): this(context,...
2021-12-05 17:20:09 112
原创 Android自定义控件开发入门与实战(14)Bitmap,从零开始系统化学Android
(2)作为画布使用关于Bitmap作为画布使用已经用了很多次了。主要有两种方式,一种是在重写onDraw()时拿到该View的Bitmap第二种是 通过Canvas canvas = new Canvas(bitmap)来创建一个画布。Bitmap格式Bitmap是位图,由一个个像素点构成的,所以我们应该知道它是这么储存每个像素点的,并且相关的像素点之间是否能够压缩。(1)如何存储每个像素点一张位图所占的内存 = 图片长度(px) * 图片宽度(px) * 一个像素点所占用的字节数。其中占用
2021-12-05 17:18:10 146
原创 Android网络编程(使用socket进行通信),音视频sdk
服务端: import java.io.*;import java.net.*;public class MyServer {public static void main(String[] args) throws IOException{ServerSocket server=new ServerSocket(5678);Socket client=server.accept();BufferedReader in=new BufferedReader(new InputStreamRead
2021-12-05 17:16:31 233
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人