: 这个项目我利用工作之余休息的时间陆陆续续的写完了,写的过程中不断的在完善和修改,也会听取读者的建议增加相应的功能,这个过程中也遇到了一些问题,例如:ANR(程序无响应)、NullPointerException...NullPointerException NullPointerException(空指针异常),我相信用Java写Android的朋友肯定遇到过找个问题,那就是null,常说的空对象。...这里有一个预初始化和一个正式初始化,预初始化在程序第一次安装运行时使用。...我们可以通过缓存去做处理,比如下图所示: 这里我通过缓存的方式判断用户是否有同意隐私政策,第一次进来肯定是没有同意的,因此会走else,而我们在同意隐私政策的时候再进行一次正式的初始化就可以了...点击左边的蓝色报错处 这里告诉你报错的具体代码行,以及下方这里有你报错设备的信息,方便你去排查原因,再往下看。 这里告诉你报错的原因是什么?
1、异常处理中一般情况下遵循 " 早抛出 , 晚捕获 " 的规则; 2、不要主动 捕获 运行时 异常 RuntimeException ; 3、对于非运行时异常,如果不处理,需要用日志记录; 示例...byteArray = byteSet.toArray(new Byte[byteSet.size()]); 7调试信息 7.1日志记录 1 ....使用 门面模式 的 日志框架,有利于 系统维护 和 各个类 的 日志处理 方式 统一 ; 示例: 【 错误用法】 public class DemoTest { ......对 trace/debug/info 级别的日志输出,必须使用条件输出形式 或者 使用占位符的方式。...这是 因为如果在在日志中有字符串拼接动作,即使日志没有打印数据,也会执行 字符串 拼接 操作 ,如果 日志 中有对象,会执行对象的 toString() 方法 ,浪费 了 系统资源 , 执行了上述 操作
概述 之前的博文也有介绍,查看—->用户界面开发基础 这里单独抽取出来,更加详细的记录一下,其实主要是API的使用。 ---- Intent传递简单数据 ?...Studio生成Parcleable插件: Intellij/Andriod Studio插件android-parcelable-intellij-plugin 只要ALT+Insert,即可直接生成...另外:Android中大量用到Parcelable对象,实现Parcable接口又是非常繁琐的,可以用到 第三方的开源框架:Parceler 可参考Android的Parcelable自动生成 两种序列化方式的比较...3)Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的 持续性在外界有变化的情况下。...这个时候,我们重新 打开这个app,这个时候很神奇的,回到了Activity2的页面,但是如果这个时候你再去获取Application 里的用户账号,程序就会报NullPointerException,
若依然出现这样的问题,可尝试重启Android Studio,若问题依旧,那我也不知道了-_-#,可以试着修改一下abiFilters的参数。...三、 DrawerLayout must be measured with MeasureSpec.EXACTLY 这个问题出现的原因多是: 多个可滑动的控件在同一个布局界面中嵌套使用,导致滑动冲突...()' on a null object reference 这个错误多为ListView或GridView的Adapter中,getView方法返回null的结果。...Recyclerview的item设置的控件宽高,凡是MATCH_PARENT和weight="1"+0dp的,通通变成了WRAP_CONTENT!...View.inflate(Context, Layout, null) 在填充内容的时候,我使用了View.inflate(Context, Layout, null)方法,如果我们将内容填充的方法改为
NullPointerException NullPointerException是我们遇到最频繁的,造成这种Crash一般有两种情况: 对象本身没有进行初始化就进行操作。...针对第一种情况导致的原因有很多,可能是开发人员的失误、API返回数据解析异常、进程被杀死后静态变量没初始化导致,我们可以做的有: 对可能为空的对象做判空处理。...因为它发生时的Crash堆栈信息往往不是导致问题的根本原因,而只是压死骆驼的最后一根稻草。 导致OOM的原因大部分如下: 内存泄漏,大量无用对象没有被及时回收导致后续申请内存失败。...离线日志顾名思义,它的内容都是预先记录好的,有时候可能会漏掉一些关键信息,因为在代码中加日志一般只是在业务关键点,在大量的普通方法中不可能都加上日志。...我们可以改造Holmes使其支持批量甚至全量下发动态日志,记录的日志等到发生特定类型的Crash时才上报,这样一来可以减少日志服务器压力,同时也可以极大提高定位问题的效率,因为我们可以确定上报日志的设备最后都真正发生了该类型
大家好,又见面了,我是你们的朋友全栈君。...; a[0] = 1; a[1] = 2; //错误,因为数组没有初始化,不能直接赋值 二维数组的声明: int[][] a; //只声明数组a,没有初始化 int[][] a = new...数组一旦被声明,它的容量就固定了,不容改变。...动态初始化:数组定义与为数组分配空间和赋值操作分开进行(静态初始化是在声明数组的同时进行辅助,动态初始化是在先声明数组,然后再对其进行赋值) 静态初始化:在定义数组的同时就为数组元素分配空间并赋值(静态初始化是在声明数组的同时进行辅助...,动态初始化是在先声明数组,然后再对其进行赋值) 默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被默认初始化 静态初始化 int intArray
你需要先安装最新版本的node.js(我最后使用的是v4.1.2),前往官网下载>> 注:我win7已经安装过Visual Studio 2013和Android开发环境(也踩了不少坑,后面有截图...我尝试下载并安装Android Studio。...-2-0-start-up-error-java-lang-nullpointerexception 最后启动Android Studio后,打开SDK Manager,设置镜像后,下载安装指定的SDK...我遇到的问题跟我之前安装的环境有问题,所以导致了一些问题,祝诸君都能顺利看到Welcome to React Native!...我贴几个我本机的环境: ANDROID_HOME 出错的提示已经很明确的告知了,它其实就是Android的SDK根目录,不行你就安装Android Studio,它里面就帮你下载好了SDK,里面包含
NullPointerException NullPointerException是我们遇到最频繁的,造成这种Crash一般有两种情况: 对象本身没有进行初始化就进行操作。...针对第一种情况导致的原因有很多,可能是开发人员的失误、API返回数据解析异常、进程被杀死后静态变量没初始化导致,我们可以做的有: 对可能为空的对象做判空处理。...因为它发生时的Crash堆栈信息往往不是导致问题的根本原因,而只是压死骆驼的最后一根稻草。导致OOM的原因大部分如下: 内存泄漏,大量无用对象没有被及时回收导致后续申请内存失败。...离线日志顾名思义,它的内容都是预先记录好的,有时候可能会漏掉一些关键信息,因为在代码中加日志一般只是在业务关键点,在大量的普通方法中不可能都加上日志。...我们可以改造Holmes使其支持批量甚至全量下发动态日志,记录的日志等到发生特定类型的Crash时才上报,这样一来可以减少日志服务器压力,同时也可以极大提高定位问题的效率,因为我们可以确定上报日志的设备最后都真正发生了该类型
: 这个项目我利用工作之余休息的时间陆陆续续的写完了,写的过程中不断的在完善和修改,也会听取读者的建议增加相应的功能,这个过程中也遇到了一些问题,例如:ANR(程序无响应)、NullPointerException...NullPointerException NullPointerException(空指针异常),我相信用Java写Android的朋友肯定遇到过找个问题,那就是null,常说的空对象。...所以使用Java开发Android的时候要特别注意这一点,注意null。这一点Kotlin就做的很好,因为空安全这个特性。...点击左边的蓝色报错处 这里告诉你报错的具体代码行,以及下方这里有你报错设备的信息,方便你去排查原因,再往下看。 这里告诉你报错的原因是什么?...主线程睡眠时间过长,导致的线程阻塞,程序无响应,ANR。 这里右边的行为日志,也很不错,可以让你知道你在当前这个页面是在做什么。
那么这是使用dalvik运行环境时所打印的GC日志,而自Android 4.4版本之后加入了art运行环境,在art中打印GC日志基本和dalvik是相同的,如下图所示: ?...这个工具分为Eclipse插件版和独立版两种,如果你是使用Eclipse开发的,那么可以使用插件版MAT,非常方便。如果你是使用Android Studio开发的,那么就只能使用独立版的MAT了。...通过这种方式,我们就成功地将内存泄漏的原因找出来了。这是Dominator Tree中比较常用的一种分析方式,即搜索大内存对象通向GC Roots的路径,因为内存占用越高的对象越值得怀疑。...当然其实也可以用和Dominator Tree中比较相似的方式,即分析大内存的对象,比如上图中byte[]对象内存占用很高,我们通过分析byte[],最终也是能找到内存泄漏所在的,但是这里我准备使用另外一种更适合...可以看到,我们再次找到了内存泄漏的原因,是因为MainActivity$LeakClass对象所导致的。
由于 Gradle 更新换代特别快,而且新的大版本经常都会提供很多新特性,这就导致了在 clone Github 上一些开源项目到本地构建时经常有报错的问题,本质原因就是因为它使用的 Gradle 版本跟你本地不一样...,而由于有堵巨墙的原因,导致一直没法成功下载它配置的 Gradle 版本,进而就无法构建项目,而报错了。...因为这个项目用到了你本地没有的 Gradle 版本,所以 Android Studio 自动去下载了,但由于都懂的原因,下载速度贼慢,因此网上才有一些博客教你说让你要去访问外国网站,明白为什么了吧。...,那么这时脚本文件也就派上用场了: gradle命令带参数示例.png gradle命令异常栈.png 这样一来就可以看到更多的日志信息了,当然我举的这个例子不好,因为可以直接看出问题出在哪了...你查了下原因,网上有教程说,让你将项目中的 gradle/wrapper 文件里的 Gradle 版本换成你本地项目中的 Gradle 版本,还跟你说因为它使用的版本你本地没有,而且被墙了,你下载需要很长时间
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 它的作用是让我们返回一级目录的...然后就屁颠屁颠地回去找bug,代码确定没错,于是加入了很多log,再次运行,查看日志。我勒个去!...查看之后,实在找不出它有错的理由,于是乎,就找之前成功过的例子 xml 文件替换进去,运行,点击,还是不行,当时我就fuck 了 dog 了。...然后我就开始 把原来不行的 布局文件 和 替换后可以的来对比。控件类型对比差异:不行的布局文件带有 button 控件,可以的没有带有button,其它地方一样。...再看看 button 的宽和高,即它的有效点击范围,都是 wrap,按道理没占满整个父view,我点其他地方,不就是没点到它吗。可事实就是如此。
,因为懒的原因没有学习过Java和Object C,但是看着这大好的前景也忍不住蠢蠢欲动啊!...盗一张Xamarin.com首页的图,激动一下人心 —— 我们知道一定有一种更好的方式来开发移动应用程序! 今天第一篇,我们先来配置一下开发环境,分为一步傻瓜自动化式和自虐手动配置式。...在@gjun的提醒下,我总算找到了为什么向导式安装(XamarinInstaller.exe)安装会失败了,原来也是因为“墙”的原因。...然后创建一个Android 4.0 的模拟器。 之后,启动它,这个过程有点儿慢。 等它初始化完了之后,我们的Android4.0就出来了。...由于初始化过程比较慢,所以我们可以保持它一直开着。
系统日志统计 也可以根据系统日志来统计启动耗时,在Android Studio中查找已用时间,必须在logcat视图中禁用过滤器(No Filters)。因为这个是系统的日志输出,而不是应用程序的。...怎样找到更多的 “证人” 和 “线索” ? “侦查案件” 的一般流程是什么? 对不同类型的 “案件” 分别应该使用什么样的调查方式? 要相信 “真相永远只有一个”,崩溃也并不可怕。...比较常见的是有 SIGSEGV 和 SIGABRT,前者一般是由于空指针、非法指针造成,后者主要因为 ANR 和调用 abort() 退出所导致。 ANR。先看看主线程的堆栈,是否是因为锁等待导致。...“只要能本地复现,我就能解”,相信这是很多开发跟测试说过的话。有这样的底气主要是因为在稳定的复现路径上面,我们可以采用增加日志或使用 Debugger、GDB 等各种各样的手段或工具做进一步分析。...虽然崩溃日志可能没有我们自己的代码,但通过操作路径和日志,可以找到一些怀疑的点。 尝试规避。查看可疑的代码调用,是否使用了不恰当的 API,是否可以更换其他的实现方式规避。 Hook 解决。
默认是在启动时显示的,但是很多开发者都不会让它启动时显示,实际上这里才是Android Studio的技巧集萃,里面都是非常实用的使用技巧,每天抽一点时间,简单看下这个Tips,用不了多久这些带给你的时间收益...NullPointerException,那么在程序时不需要设置任何断点,只要App因为NullPointerException异常而导致崩溃,系统就会在对应的地方自动断点并暂停 日志断点 开发者经常会遇到这样的情况...,整个工程的代码已经写完了,突然出现了一个bug需要加一行Log进行调试,因为这一行Log要把整个工程都编译一遍,这是非常痛苦的事,而实际上,Android Studio已经提供了针对这个问题的解决方案...win的快捷方式ctrl + 空格(win同样大部分和输入法冲突, 请手动在AS设置里面keymap项查找completion basic手动修改快捷键) 快速生成变量 比如在方法体中logi...Studio中,系统给开发者提供了默认的方法注释模板在方法名上一行输”/**”,再按Enter键确认,即可获取方法的注释代码 但和Android一样,Android Studio也提供了强大的自定义功能
更新代码的方式是什么?你还在用拷贝的方式保存代码吗?U盘?移动硬盘?还是网盘? 正文 以上的一些方式你可能在刚开始学习或工作的时候会用到,但不是长久之计,因此你需要学会使用git。...初始化一个空的git仓库,此时你会发现你的项目的文件夹下多了一个.git文件夹。 它是一个隐藏文件,如果看不到,就需要设置一下查看方式。 ② git add ....经过我的百度了解之后,预测是远程仓库里面的README.md文件导致的,我们这样提交代码,可能会导致它丢失。这个颜色的字体是警告,我们无视它,执行。...百度上说是因为本地当前分支没有和远端的分支进行相关联。但是我之前明明关联了,那么这又是闹哪样呢? 难道是改了本地分支名的原因吗? 这里其实还有一句话,告诉我们需要关联的执行下面这一行指令。...莫慌,再尝试别的方式。 ⑧ git pull 刚才我们一直是提交,但是因为远程仓库里面有一个README.md导致本地库和远程库有差异,所以我们反向操作一下,先把远程库的内容拉取到本地,试试看。
启动耗时统计的八种方式 Displayed 在 Android 4.4(API 级别 19)及更高版本中,在 Android Studio Logcat 中过滤关键Displayed,可以看到对应的冷启动耗时日志值...reportFullyDrawn 当我们在使用异步的方式来加载数据,这会导致的一个问题就是应用画面已经显示,同时 Displayed 日志已经打印,可是内容却还在加载中。...AOP的使用场景 无痕埋点:分离业务代码和统计代码; 安全控制:比如全局的登录状态流程控制; 日志记录:侵入性更低更有利于管控日志系统; 事件防抖:防止View被连续点击触发多次事件; 性能统计:检测方法耗时...CPU Profiler 另一种方式就是使用 Android Studio3.2 或更高版本,通过 CPU Profiler 来查看 App 的启动时间: 在 Android Studio 工具中选择...优缺点 Systrace 的性能开销非常低,因为它只会在我们埋点区间进行数据追踪记录。而 Traceview 是会把所有的线程的堆栈调用情况都记录下来。
通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。...它的好处:统一数据访问方式。 Service服务:是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要长期运行的任务(一边打电话,后台挂着QQ)。...) 6 app出现ANR,是什么原因导致的?...20 如何fiddler实现弱网的原理? Fiddler限速是以网络延迟的方式实现的,网络延迟时间*网速=传输字节数。...用工具adb logcat 我经常会把日志用重定向的方式写到一个文件夹中: >D:\log.txt 在具体使用时会对日志进行等级筛选过滤,比如: *:E(E是等级error) 为方便定位日志,可以显示日志记录的时间
即使是最新的华为 Mate 20,最大的 Java 堆限制也才到 512MB,可能我的物理内存还有 5GB,但是应用还是会因为 Java 堆内存不足导致 OOM。...处于不同的 Activity 状态时,在您的应用与另一个应用之间切换(导航到主屏幕,然后返回到您的应用)。 ANR 我的经验是,先看看主线程的堆栈,是否是因为锁等待导致。...另外一方面因为序列化文件需要包含的信息非常多,导致它的大小比 Class 文件本身还要大很多,这样又会导致 I/O 读写上的性能问题 Parcel 序列化和 Java 的 Serializable 序列化差别还是比较大的...因为用户最容易感知这个,我明明没有怎么打开,为什么耗这么多?在后台不要做这些:长时间获取 WakeLock(及时释放)、WiFi 和蓝牙的扫描、GPS、video、audio ?...俩种方式上报日志:push上报,主动上报(在用户出现奔溃,反馈问题时主动上报日志(可以重启了上报)) 正因为反复“痛过”,才会有了微信的用户日志和点击流平台,才会有美团的 Logan 和 Homles(
它提供了模型 - 视图 - 控制器架构,可用于开发灵活的Web应用程序。在本教程中,我们将重点关注与之相关的问题,因为它通常是Spring开发人员面试的热点问题。强烈建议收藏!...ViewResolver解析后返回具体View; 10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中) 11. DispatcherServlet响应用户。...一旦出现在模型中,我们应该填充所有具有匹配名称的请求参数的参数字段。 Q @Controller和@RestController之间有什么区别?...例如 从/user/123提取值123给/user/{id}控制器来获取一个id=123的数据映射关系。需要特别指出的是通过此注解获取的值不会被编码。具体可通过我的文章来获取原因。...拦截器切面处理一些公共逻辑而避免重复处理程序代码(如日志记录),也可以用来更改Spring模型中全局使用的参数。
领取专属 10元无门槛券
手把手带您无忧上云