android项目学习心得(全源导航)

1、acitivity的跳转,返回上一个界面是结束当前界面,而不是从当前界面去跳转前一个界面(即将前一个界面创建了一遍),概念要理清,具体写法由隐式和显式多种写法。像这种操作UI界面,可以多使用fragment,就像看新闻点击一层层推送新闻,每次退回都是返回前一个浏览的新闻。

2、写Android代码的时候,也要注意java中空指针问题,空指针就是在栈中声明了一个对象,但是并没有在堆中实例化,要先if-else判断下传参操作的对象是否为null。

在一些转换(强制)类型的代码里,最好也要用try-catch进行异常判断(比如接口和类相互转化),如果转换失败最好再抛出异常,便于检查代码。

 

在acticity里直接对activity内容进行操作,最好不要定义activity,而是使用官方getActivity()更加安全。

 3、对于activity的生命周期的理解,这一块比较重要,在写控件注册和取消注册的时候,要确定activity激活和销毁的时候,哪个函数在栈顶,用CSDN模板不一定次次都行的通。这个和activity的启动方式有关,除了singleInstance(类似支付宝页面,不能再创建新的支付界面,只能用栈中唯一的那个支付界面),其他三种用的最多,当然根据情况如果没必要使用太多内存,还是用标准的启动方法比较好。

4、app运行闪退,看Manifest里面有没有注册活动,自定义activity有时候会没有自动注册;也可以将Manifest里面启动intent赋给出问题的activity,如果没有闪退,考虑前一个activity的layout有没有注册准确或者跳转语句有没有写错跳转对象的类,如果闪退了则是该activity出现问题,先检查layout,然后看看是不是有空指针异常,从而进行异常判断操作。还有一种情况就是权限有没有给全,在开发定位,网络资源的时候,要打开网络权限以及其他厂家SDK里的相关权限。

5、再学习了接口之后,发现Android上按钮等控件的点击触发事件,实际上是创建接口的匿名实现类的匿名对象,这样做方便。

Android里:

 

捕获的时候,若方法形参里面含有回调函数,建议使用匿名类对象。

6、 当ros系统执行命令roscore无法启动,并且发现报错是无法连接本地服务器,这时候要去修改bashrc文件里的ROS_HOSTNAME  和 ROS_MASTER_URI一致即可。( hostname是主机名,用于在系统上标识一台机器; IP地址(联网后分配的URI是在TCP/IP网络中唯一标志一台机器)。

7、使用try-catch-finally处理编译时异常,是得程序在编译时就不在报错,但运行时仍可能报错,相当于我们使用try-catch-finally将一个编译时可能出现的异常,延迟到运行时出现。

8、Android里的服务service和普通activity的一个显著区别是当跳转到service界面时,即使退出也可以继续运行服务里的程序,类似哔哩哔哩后台视频播放功能。而bindservice是随着activity的关闭而关闭。应用程序是一个默认的单线程单任务的程序,不能去阻塞UI线程,不能在UI线程外访问UI组件。同步线程处理类似于打开一个网站要有进度条显示,而异步就是微博中点击收藏,只需要告诉用户是否收藏成功,不需要特地等待。在开发过程中可以将显示的进程放进UI进程,而那些费时的进程则可以放进自己定义的进程。

9、线程里的sleep函数可以强制线程阻塞,这让我想起了本科同学玩王者荣耀,同学a用的是oppor9,同学b用的是华为,a喜欢用刺客类型的英雄,在地图漫游的时候游戏不卡,一旦组团开大就会变卡,硬件系统着实会对软件发挥性能造成影响,但在时期不长的更新的情况下,也不排除工作人员对英雄的大招进程周期故意加了sleep函数,然后和游戏方有利益关系的手机厂商借此推出新机型,让游戏识别新机型调出没有sleep的进程,造成手机性能好的假象。

10、异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。

违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。

11、首先明确导航的基本概念:检测和控制载体从一个地方移动到另一个地方的过程。常用的坐标系有日心坐标系、地球坐标系、地理坐标系等。对于地球,地心坐标系和地球坐标系是相似的,他们的区别在于地心惯性坐标系的原点不转动,而地球坐标系与地球固连,随地球一起转动。对于载体,载体的航向角、横滚角、俯仰角是很重要的参数,机体坐标系一般采用地理坐标系,即原点在载体重心,x轴水平向东、y轴与当地子午线一致、z轴指天向上,这就是东北天坐标系。

基本的坐标变换按照z-x-y轴旋转,变换矩阵按哪个轴旋转,哪个轴为1,例如姿态变换矩阵,还有位置变换矩阵,在求解位置矩阵的时候可以将矩阵中的角度计算公式简化为9个变量,再用三角函数求解,并且由速度矩阵进行微分可以求得速率矩阵,前提是进行初始对准,即当地位置已知。

地球是一个梨状的椭球,有四个比较重要的线,l1:地心垂线、l2:引力垂线、l3:地理垂线、l4:重力垂线。

 12、Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。

用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。

throw语句用来明确地抛出一个"异常"。

throws用来标明一个成员函数可能抛出的各种"异常"。

Finally为确保一段代码不管发生什么"异常"都被执行一段代码。

可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。

13、error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况

    exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况

14、加速度计测得其实是比力,在地心惯性坐标系中,加速度等于引力矢量与比力之和,比力,通俗讲就是载体相对惯性空间的绝对加速度和引力加速度之差,这个量对于姿态矩阵计算很重要,体现在,由比力(机体)推出比力(导航)推出速度推出角速度推出姿态微分矩阵最后得出姿态矩阵,由此得到横滚、俯仰、偏转角,同理还可以得出导航位置信息。

15、捷联惯导相比传统的平台惯导,用数学计算平台代替了物理平台,便于维护体积小重量轻成本低,便于采用余度技术,提高可靠性。根据组合结构、信息交换以及组合的程度不同,SINS和GPS组合可以分为松组合、紧组合、超紧组合和深组合四种组合模式:松组合是一种低水平的组合模式,在该系统中GPS和SINS单独工作,通过专用接口将两者的量测数据输入组合滤波器,利用GPS信息通过滤波器估计并校正SINS误差,使其保持较高的导航精度;紧组合根据SINS信息和卫星星历计算接收机相对于卫星视线方向的距离和距离变化率与GPS码环和载波环得到的伪距伪距率相减作为卡尔曼滤波器的量测信息,然后利用滤波器估计SINS误差率和接收机钟差等对SINS进行校正;超紧组合还利用SINS输出的速率信息来辅助GPS的跟踪环路;深组合是以矢量跟踪为基础采用SINS与GPS接收机信号相关器的输出进行数据融合。

16、对于代码的优化,除以2可以用>>1代替;>>>无符号右移,在androidstudio里面运行测试类,出了java类放的位置要正确,测试函数前也要加上注解@Test,这样才能运行成功,并且结果在logcat里查询.

17、Android通信机制:message是数据载体;handler功能是发送消息、处理消息、移除消息;CONTEXT是提供了关于应用环境全局信息的抽象类,通过他的对象才可以操作系统或应用的相关资源;

18、鸿蒙开发IDE  DevEcoStudio打开工程的目录千万不能包含中文。安卓内部存储需要root权限,建议把文件保存到sd卡上。


版权声明:本文为zhaohongyun55555原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。