天天看点

安卓学习笔记(1)

【2019-8-27 11:12】从昨天晚上开始决定进军安卓软件开发领域。

从昨天晚上开始下载安卓编译器Android Studio。我终于开始了自己的安卓道路。然而前进的道路并不是一帆风顺的。在下载编译器的道理上,我首先参考了《第一行代码》的百度网盘地址。然而,pandownload下载下来的是一个不知道是什么东西的鬼玩意。那是个什么downloading文件,让我直接删掉了。就这样昨天的成果全部以失败告终。

今天早上,决定再次下载安卓编译器。终于经过深思熟虑,挑选了一个大佬的可以供使用的博客:https://blog.csdn.net/siwuxie095/article/details/53431818#commentBox

我也因此灰常开心。

但是,彩虹之后有风雨。在重装之后的电脑我已经搞不清java环境在哪里了。所以就重新下载,也算跟着教程走。在下载jdk的过程中也历尽艰难。

1.在配置java环境的过程中,必须严格注意路径问题,我因此失败了一次,并且找了一个多小时甚至两个小时的bug。自己路径不正确,任何教程也拯救不了你。我觉得有可能是因为路径是java环境配置中的一个重要参数吧。

上面是我总结的第一个教训。现在呢,我的java环境配置好了。

【18:33】我承认,我真的还不算一个开发者,因为我连编译器都需要找教程来下,都是英语惹的祸。哎!

【20:24】在教程的帮助下,我稀里糊涂的把编译器下载好了。但是,我并没有对安卓编译器进行汉化,所以这些英语给我造成了很大的困扰,但是没办法,谁让这编译器是国外的程序员发明的呢?只能硬着头皮读。

我终于在阅读《第一行代码》过程中发现,对我来说,最大的困难在于,因为编译器版本不同,我无法完全按照书去学习。以至于我必须寻找新的教程学习。毕竟,我并不怎么高的智商和经验导致我必须寻找一个“老师”。

https://blog.csdn.net/shengmer/article/details/78866918这个教程是帮助我稀里糊涂下载好编译器的教程。

【8-28 16:20】给自己定一条原则,不会的技术上网或者在书上学;不会的单词查。

【16:46】我终于在新建一个工程以后,把gradle构建完了。耗时10分钟左右。截图为证:

安卓学习笔记(1)

  【16:50】在解决完新建工程以后,我还要继续凭借自己的尝试去编写第一行helloworld的程序。而且那个sync我真的不知道是啥!接下来,helloworld程序需要我去尝试一下编写和运行了。

【8-29 10:06】这个...helloworld我书上的内容大体看完了,基本大体思路还是可以理解的。但是在运行的时候出现问题了。比如:虚拟机不存在,在手机上出现error installing APK的错误,让我很尴尬。只能有一种解决办法,就是上网搜。哎,但是事情并不是这么简单,现在电脑不能上网,只能用手机上网了。

【9-25 14:11】因为安卓选修课程要求作业是开发一款APP,因此这个巨大的任务已经从兴趣转化成了强制的事情。现在,在我的勇敢的尝试和胡乱点(我想亲切的称之为暴力操作)之下,安卓编译器以他完美的下载插件的机制解决了模拟器的安装问题;下一步我想做的是:在手机上运行第一行代码。

【14:23】好的,我宣布,安卓第一行代码helloworld在自己手机上运行成功。当然这没什么骄傲的。和未来要接触和实践的知识相比,这只是冰山一角。但是这意味着,龙哥对安卓软件的探索之路起步了!

【16:58】刚刚我用自己的大头照做APP的图标,之后跑helloworld。我相信毕竟有了ACM编程的基础,学习面向对象还是不难的。分享一下:学习安卓的几个原则:

   1.开发驱动学习

   2.探索激发兴趣

   3.工程开发需要有规划,分阶段

同时,因为这个大头照,我发现安卓系统真的是非常强的一个系统:在应用程序图标这一点上,安卓编译系统能够把这么大的图片压缩成很小的一部分之后展示。我本来以为会只是展示一部分,我真是低估谷歌公司那帮神奇的程序员了。

【19:36】本来想把自己写的helloworld通过qq发送给别人在别人手机上运行一下,没想到啊,竟然不能成功!可恶可恶。这个是个长远的问题,需要去尝试解决。

【10-9 8:20】跟着《第一行代码》大体浏览完了intent类的使用,Toast的使用等等,了解完这些类的用法。但是到达活动这个地方的时候,遇到了瓶颈。难点是活动生命周期的各种理解。下面开始详细的来写:

(1)第一对:onCreate():每个活动都会重写这个方法,会在活动第一次被创建的时候调用。这个方法中应该完成活动的初始化操作,比如加载布局和绑定事件。

onDestroy():活动调用了这个方法以后,活动的状态变成了销毁的状态。【这是活动在销毁之前调用的最后一个方法】

这两个方法之间经历的是完整的生存期。

(2)第二对:onStart():活动由不可见变成可见的时候调用。

onStop():活动由可见变成完全不可见的时候调用。

这两个方法之间经历的是可见生存期。

(3)第三对:onResume():这个方法在活动准备和用户进行交互的时候调用。此时活动一定处于栈顶位置,并且处于运行状态。【调用了此方法后,活动开始进入和用户的交互状态】

onPause():调用此方法后,活动就停止了和用户进行交互的状态。

这两个方法之间经历的是前台生存期。期间,活动总处于运行状态,并且可以和用户进行交互。

(4)onRestart():一个活动从停止状态到运行状态中间调用的方法。相当于重新启动一个停止的活动。

下面再科普:活动的四个状态(根据存在于返回栈的位置和是否可见定义)

运行状态(在栈顶,可见)>>>-----不在栈顶位置---->>>暂停状态(不在栈顶,可见)>>>-----不可见----->>>停止状态(不在栈顶,不可见)>>>-----退出栈---->>>销毁状态(不在栈)

【9:56】总结一句话:活动的各种状态,把握两个点:是不是在栈顶,是不是可见。栈顶活动是可见活动的子集。

【16:56】活动的启动模式。在结束了活动生命周期的学习以后,我进入到了这个章节。

活动启动模式一共四种standard,singleTop,singleTask,sinleInstance。

(1)standard模式:活动默认的启动模式。在声明(显示指定)之前的启动模式就是这个模式。Android使用返回栈管理活动。

使用此模式活动的特点:不管是否在返回栈中存在,每次启动这个活动都会创建一个新的实例。

【创建了多少实例就需要通过多少back健退出】

(2)singleTop模式:如果发现该活动是返回栈栈顶的活动,就直接使用,不再创建新的实例。

(3)singleTask模式:每次启动新活动,检查返回栈中有没有这个活动,如果有直接使用,如果没有再创建新的实例。并且把返回栈中这个活动上面的活动统统出栈。

(4)singleInstance模式:最特殊最复杂的一种。我在网络上学习了一下,根据https://blog.csdn.net/mr_jingfu/article/details/79077613和https://blog.csdn.net/weixin_40855673/article/details/80630634的大体介绍,可以这样去理解这个模式:

    我暂时理解到了这个程度:就是每新启动一个活动(之前的任务栈中不存在时),都会为这个活动新建一个返回栈或者叫做任务栈。

   但是我看到网上说,这个启动模式有坑,不太懂,但是我暂时就理解到这里吧,毕竟还是小白。

【10-14 19:19】在运行singleTop模式的时候,出现了一个问题(https://blog.csdn.net/shenggaofei/article/details/80458314)。然后我从网上找了找问题解决办法。正在实验。因为从今天上午开始,启动一个活动变成了一件很难很漫长的事情。太烦人了...

【19:42】这么长时间,15分钟,一直在installing apk。所以决定再来一次!

【19:53】又一直在installing apks8分钟。宣告了第一次实验解决问题失败了。

【20:01】又在尝试链接中的第二种方法。

【20:07】天哪,运行到4分钟多又出现了那种错误,installation failed with message null。所以这次我决定:上面链接中的两种方法一起使用,如果再失败就只能另劈途径了。

【20:12】然而,又开始了漫长的installing apks的日子...

【20:18】依然以失败告终...难受啊。

【10-16 8:30】又根据这个链接:(链接https://blog.csdn.net/weixin_30527143/article/details/97419597)开始了一次排查,看看是不是虚拟机死机造成的installing apks...一分钟,我的天解决啦?!感谢博主。俺谢谢您啦!

【9:04】我咬文嚼字看书。发现:每个应用程序都有自己的返回栈或者称作管理栈。我想知道一个程序中的不同java活动是不是存在于同一个返回栈里,就可以印证这句话了。经过测验,发现同一个app在前三种启动模式只有一个返回栈。对于singleInstance模式,经过测验发现,指定为这个模式的活动,会在一个app中新开启一个返回栈来管理这个活动。

【10:35】留一个链接是用来打包apk的:https://blog.csdn.net/hefeng6500/article/details/79869647