首页 文章 精选 留言 我的

精选列表

搜索[Android],共10000篇文章
优秀的个人博客,低调大师

Android开发者要搬运多少年代码才能突破年薪40W?

这个问题算是抛砖引玉了。因为年薪40w恰好是一个沟壑,是高级工程师才能突破的一道坎 1.普通工程师跟高级工程师的区别 我这里发两张图片对比,大家当娱乐性质一起来了解一下两者间工作内容的区别; 图一不禁又让我回想起刚刚工作那两年,经常没日没夜的加班,赶项目。所以现在不得不过上了往水杯里放枸杞的生活..... 2.如何定义高级工程师呢? 第一种是在原生公司里成长。特别优秀业务能力很强。在技术方面是公司的权威,有独挡一面的能力。但是局限于本公司单一的产品技术,一单公司不行了,想跳槽或者重新出去找工作,很难找到同等待遇。而且由于处在之前的环境下,已经产生了拒接学习的心理,基本上就已经到了人生的天花板。 第二种就是实实在在的技术好。技术非常全面和完善。懂得跟团队一起进步,而且很低调,非常明白学习的重要性。大家应该都有过这样的经历感受,平时接触的那些越是大牛,就越低调觉得自己需要学习提升的太多。 3.如何成为高级工程师? 3.1.不断学习新技术,扩展完善自己的技术体系; 比如进来Google推出来的越来越火的跨平台框架 Flutter ,还有kotlin语言等。 3.2.每个技术要学会其中的原理和技术内核; 知其然更要知其然,脱离cv工程师。 3.3.丰富的项目实战; 通过项目实战,深入了解技术内核原理,随手就能自己手写一套框架出来 3.4.全面的技术体系; app开发框架知识体系、全方位性能优化、 NDK模块、 小程序开发 、 混合开发 最后给大家分享一份移动架构大纲,包含了移动架构师需要掌握的所有的技术体系,大家可以对比一下自己不足或者欠缺的地方有方向的去学习提升; 需要更高清架构大纲的朋友可以加群;701740775找群主无条件免费获取 需要提供其中系统进阶资料的也可加群。麻烦备注一下csdn需要获取哪方面资料。谢谢支持!

优秀的个人博客,低调大师

Android用5种方式实现自定义计时器, 哪种才是你的菜?

Chronometer和CountDownTimer计时器github传送门 目录 效果图 前言 Timer + TimerTask + Handler Timer + TimerTask Handler Thread + Handler Handler + Runnable 最后 效果图 看下效果图, 这是五种不同的方式演示计时器. 当然不看源码是看不出差别的. 效果图 前言 这次的文章不知道能不能帮助大家, 但是对我自己的帮助还是蛮大的, 才知道自己原来用的方法不是最优而且也不是最简. 然后我之前有一篇文章是用官方控件和类实现的, 有兴趣可以看一下Chronometer和CountDownTimer计时器. Timer + TimerTask + Handler 在TimerTask实例的run方法中用Handler实例发送消息, 用Timer实例启动计时器, 从0ms开始, 间隔1000ms. case R.id.cv_start1: if (mTimer1 == null && mTask1 == null) { mTimer1 = new Timer(); mTask1 = new TimerTask() { @Override public void run() { Message message = mHandler.obtainMessage(1); mHandler.sendMessage(message); } }; mTimer1.schedule(mTask1, 0, 1000); } break; case R.id.cv_stop1: if (mTimer1 != null) { mTimer1.cancel(); mTimer1 = null; } if (mTask1 != null) { mTask1.cancel(); mTask1 = null; } break; Timer + TimerTask 比起第一种, 这种更Java, 但是可以少一个Handler实例. if (mTimer2 == null && mTask2 == null) { mTimer2 = new Timer(); mTask2 = new TimerTask() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { mTvTime2.setText(getTime()); } }); } }; mTimer2.schedule(mTask2, 0, 1000); } Handler 这种方法就直接告别Timer和TimerTask了, 通过Handler的发消息延迟sendMessageDelayed以及不同的消息内容(就是what值)解决问题. case R.id.cv_start3: { Message message = mHandler.obtainMessage(2); mHandler.sendMessage(message); } break; case R.id.cv_stop3: { Message message = mHandler.obtainMessage(3); mHandler.sendMessage(message); } case 2: { mTvTime3.setText(getTime()); this.removeMessages(2); Message message = this.obtainMessage(2); this.sendMessageDelayed(message, 1000); } break; case 3: this.removeMessages(2); break; Thread + Handler 老朋友Thread + Handler, 原来经常这么写, 现在不了(手动滑稽). /** * 启动线程 */ private void startThread() { if (mThread == null) { mThread = new MyThread(); mThread.start(); } } /** * 停止线程 */ private void stopThread() { if (mThread != null) { mThread.stop = true; mThread = null; Message message = mHandler.obtainMessage(5); mHandler.sendMessage(message); } } Handler + Runnable 最后一种我目前最喜欢. 你连what值都无需处理, 直接postDelayed设置时延, 然后交给实现Runnable接口的实例的run方法来做. case R.id.cv_start5: { if (mRunnable == null) { mRunnable = new MyRunnable(); mHandler.postDelayed(mRunnable, 0); } } break; case R.id.cv_stop5: { mHandler.removeCallbacks(mRunnable); mRunnable = null; } break; private class MyRunnable implements Runnable { @Override public void run() { mTvTime5.setText(getTime()); mHandler.postDelayed(this, 1000); } } 最后 总之一点, 用第三种Handler和第五种Handler + Runnable肯定比其它的消耗少得多, 所以很推荐. 或者你还有更棒的方法可以评论区告诉我下. 喜欢记得点赞, 暗中关注我也是可以的哦~

优秀的个人博客,低调大师

Android ShareSDK 微博分享 (8995)app auth fail for appKey&sign&package 解决

小菜这两天接到客户的问题反馈,说微博分享失败,一直提示程序签名错误,这可把我们急坏了,紧急解决。我们借助的是 Mob 的 ShareSDK 分享功能,实际应用中相对比较稳定,集成也不复杂。 解决尝试如下: 1. 核对程序包名,签名文件MD5,AppKey 和 AppSecret,多人轮流挨个字母的核对,都是正确的,可依旧是微博分享报程序签名错误; 2. 因为当前用的 MD5签名生成器 是用的微信的 GenSignature,担心有不一致的情况,立刻下载微博官方的 MD5签名生成器;测试两者生成的 MD5 值完全一致; 微博-MD5签名生成器 微信-GenSignature 3. 不得已找到 Mob 的官方客服小哥咨询,优先让我们核对的就是程序包名,签名文件MD5,AppKey 和 AppSecret 等信息,确认一致,把截图信息和 apk 等发给客服小哥测试,确实分享失败,客服小哥也很头痛;之后检查 ShareSDK 版本,项目中应用的是 3.1.2 版本的,客服小哥建议升级一下最新的 3.1.4 版本尝试一下; 4. 集成主要包括 MobSDK.gradle 参数与微博开放平台中参数一致,请注意,核对再多次也不为过,如下; 1. MobSDK.gradle 微博参数 2. 微博开放平台基本参数 3. 微博开放平台 AppKey & AppSecret 4. 微博开放平台授权回调 Uri 5. 理论上应该不会有问题了,可微博偏偏跟小菜作对,依旧报微博分享失败,程序签名错误,可愁坏了大家; 6. 反复测试,实在没办法,突然想到会不会是手机有问题,死马当活马医,换一个手机安装,该手机没有微博客户端,下载安装,分享测试,成功!成功!成功!测试这么久居然没有想到会是微博缓存或其他的问题,直接把以前的测试机微博客户端卸载重新安装,居然都正常了,真不知该哭还是该乐。至于为什么是微博客户端这边的问题还有待研究。 就小菜个人遇到的问题,微博分享失败,出现(8995)app auth fail for appKey&sign&package 问题时,九成半的原因是参数配置信息出错了,主要查看 MD5 签名,如果一切的一切都正常的话,有可能就是这半成的微博客户端问题,不妨卸掉重新安装试试。 小菜的解决方法就是如此,希望大家不要遇到这种奇葩问题!以下是小菜公众号,欢迎闲来关注~ 小菜公众号

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册