第二行代码

---恢复内容开始---

一、开始启程--你的第一行Android代码

Android的四层架构

1.linux内核层--为Android设备的各种硬件提供底层驱动

2.系统运行库层--通过一些C/C++库来为Android系统提供主要的特性支持

  Android运行时库,提供一些核心库,允许开发者使用java语言编写Android应用

    Dalvik--运行时编译

    ART--安装时编译

3.应用框架层--提供构建应用程序时可能遇到的各种API

4.应用层--应用程序

二、先从看得到的入手--探究活动

1.活动的生命周期

oncreate 方法 当Activity第一次启动的时候调用

onDestroy 方法 当Activity销毁的时候调用

onStrat() 方法 当Activity变成可见的时候调用

onStop() 方法 当activity 不可见的时候调用

onResume()方法 当activity可以获取焦点的时候  当界面的按钮可以被点击了

onPause()方法 当失去焦点的时候调用 当按钮不了可以被点击的时候调用

onRestart()当界面重新启动的时候调用

2.显式意图--用于跳转自己的页面

Intent intent = new Intent(MainActivity.this,SecondActivity.class);                startActivity(intent);

3.隐式意图--用于跳转系统自带程序的页面

                Intent intent = new Intent(Intent.ACTION_VIEW);                intent.setData(Uri.parse("http://www.baidu.com"));         startActivity(intent);

4.界面跳转传递数据(向下一个界面传递数据)

SecondActivity.actionStart(MainActivity.this,"data1","data2");

5.界面跳转返回数据(返回数据给上一个界面)

startActivityForResult();

6.onSaveInstanceState()--活动被回收时调用,解决活动被回收临时数据得不到保存问题

7.活动的启动模式

standard--先进先出,栈顶可重复叠加

singTop--栈顶不可重复叠加  应用场景:浏览器书签

singTask--检查,若已存在,所有上面活动出栈  应用场景:浏览器的Activity

singleInstance--新开任务栈,新开的任务栈只有一个实例  应用场景:来电显示

8.活动的高级用法

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("BaseActivity", getClass().getSimpleName());//知晓当前是在哪一个活动
ActivityCollector.addActivity(this);
}

@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);//随时随地退出程序
}

}

9.Menu的使用

10.活动的销毁--finish();效果同back键

  

三、软件也拼脸蛋--UI开发的点点滴滴

1.Android控件的可见属性

visible--可见

invlsible--不可见,占据位置和大小

gone--不可见,不占空间

2.对话框

3.布局,百分比布局

gravity:对齐方式,子控件相对于当前控件的对齐方式
layout_gravity:当前控件相对于父控件的对齐方式

margin:当前控件相对于四周的间距。
padding:当前控件中的子控件相对于当前控件四周的间距。

所有控件直接或间接继承View,所有布局直接或间接继承View

引入布局

<include layout="@layout/title"/>

标题隐藏

android.support.v7.app.ActionBar actionBar = getSupportActionBar();if (actionBar != null)    actionBar.hide();

4.ListView--用于展示大量的数据,这些数据可以是网上下载的,也可以是从数据库中读取的

更强大的滚动控件--RecyclerView

四、手机平板要兼顾--探究碎片

1.碎片是嵌入活动中显示的

2.活动中得到相应的碎片

  RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.right_fragment);

3.碎片中调用活动里的方法

  MainActivity activity = (MainActivity) getActivity();

4.碎片的生命周期

onAttach()--碎片与活动建立关联时调用

onCreate()

onCreateView()--为碎片创建视图(加载布局)时调用

onActivityCreated()--与碎片相关联的活动已经加载完毕的时候调用

onStart()

onResume()

onPause()

onStop()

onDestroyView--与碎片相关联的视图被移除时调用

onDestroy()

onDetach()--碎片和活动解除关系时调用

5.动态加载布局

6.平台和手机兼容

五、全局大喇叭--详解广播机制--打开程序其他组件,启动一个服务,监听网络状态(动态注册),开机启动(静态注册)等

1.标准广播--异步执行广播,所有广播接收器同时接到广播,无法被拦截

2.有序广播--同步执行广播,优先级,可以被拦截

3.动态注册广播--可自由地控制注册与注销,必须要在程序启动后才能接收到广播

必须取消,在onDestory()方法中调用unregisterReceiver()方法

4.静态注册广播--程序未启动时也能收到广播

注册后直接实现onReceive()方法

5.onReceive()方法运行较长时间而没有结束时程序会报错,不能做耗时操作。so,广播接收器常用于,打开程序其他组件,启动一个服务等。

6.自定义广播

7.中断广播abortBroadcast()

8.本地广播LocalBroadcastManager--解决广播安全性问题,只能在应用程序内部传递,无法静态注册

六、数据存储全方案--详解持久化技术

1.文件存储

openFileInput()和openFileOutput

2.SharePreferences

3.SQLite--使用LitePal操作数据库

七、跨程序共享数据--探究内容提供器

1.不同应用程序共享数据(跨程序数据共享),可实现部分数据共享

2.运行时权限(Android6.0)

3.使用场景--使用现有内容提供者读取和操作相应程序中的数据,创建自己的内容提供者给我们的程序数据提供对外访问接口

八、丰富你的应用程序--运用手机多媒体

1.通知(Notification)--应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行。

2.通知可在活动(应用较少,一般程序进入后台才需要使用通知),广播接收器,服务里创建

3.调用摄像头和相册

4.播放多媒体文件

九、看看精彩世界--使用网络技术

1.WebView的用法

2.使用HTTP协议访问网络--HTTP协议--客户端向服务器发送一条HTTP请求,服务器收到请求后返回一些数据给客户端,然后客户端再对这些数据进行解析和处理

3.HttpURLConnection

4.OkHttp

5.解析XML格式数据

6.解析JSON格式数据--GSON

十、后台默默的劳动者--探究服务

1.服务是Android实现程序后台运行的解决方案,适合执行那些不需要和用户交互而且还需要长期运行的任务,服务依赖与创建服务的进程,进程被杀掉,服务停止。

2非UI线程不能更新UI

耗时操作(联网 URL)不能再UI线程执行(可能连接超时)

Message 消息

MessageQueue 消息队列       存放程序收到的消息队列

Handler 消息处理器     1.发送消息-sendMessage()       2.处理消息-handlerMessage()

Looper  轮询器      轮转查询消息队列,一旦发现有消息到达,把消息转发给发送此消息的Handler进行处理

runOnUiThread()  异步处理消息接口封装

3.AsyncTask

  onPreExecute()--界面初始化

  doInBackground(Prams...)--所有代码在子线程中运行

  onProgressUpdate(Prams...)--可以对UI进行操作

  onPostExecute(Result)--后台任务返回结果作为参数,可以进行一些UI操作

4.Service

  onCreate()--服务第一次创建时调用

  onStartCommand()--每次启动服务时调用

  onDestroy()--服务销毁时调用

  onBind()--与服务间进行通行

5.startservice 方式开启服务 服务就会在后台长期运行 直到用户手工停止 或者调用stopService()或stopSelf()方法 服务才会被销毁

bindService 方式开启服务 当activity销毁的时候服务也销毁  不求同时生但求同时死

6.Service

  onCreate()--服务第一次创建时调用

  onStartCommand()--每次启动服务时调用

  onDestroy()--服务销毁时调用

7.前台服务--应用:彩云天气

8.android进程优先级

  1、空进程

    这是Android系统优先杀死的,因为此时该进程已经没有任何用途。

  2、后台进程

    包含不可见的Activity,即跳转到其他activity后,由于资源不足,系统会将原来的activity杀死(即跳转的来源)

  3、服务进程

    即Service,当系统资源不足时,系统可能会杀掉正在执行任务的Service。因此在Service执行比较耗时的操作,并不能保证一定能执行完毕。

  4、可见进程

    当前屏幕上可以看到的activity,例如显示一个对话框的activity,那么对话框变成了前台进程,而调用他的activity是可见进程,但并不是前台的。

  5、前台进程

    当前处于最前端的activity,也就是Android最后考虑杀死的对象。一般来说,前台进程Android系统是不会杀死的,只有当前4个都杀掉资源依旧不够才可能会发生。

9.服务的最佳实践--完整版的下载示例

十一、Android特色开发--基于位置的服务(Location Based Service)

1.LBS核心--确定用户的位置

GPS定位--手机内置的GPS硬件和卫星交互获取当前经纬度位置,精确度高,只能在室外使用

网络定位--根据手机当前网络附近的三个基站进行测速,计算手机和每个基站的位置,确定出一个大概位置,精确度一般,室内室外均可用

2.百度地图

十二、最佳的UI体验--Material Design实战

1.Toolbar

2.DrawerLayout

3.NavigationView

4.FloatingActionButton--悬浮按钮和可交互提示

5.Snackbar

6.CoordinatorLayout

7.CardView

8.AppBarLayout

9.SwipeRefreshLayout

10.CollapsingToolbarLayout

十三、继续进阶--你还需要掌握的高级技巧

1.全局获取Context的技巧--Application

2.使用Intent传递对象--Serializable方式,Parcelable方式

3.定制自己的日志工具--LogUtil封装

4.调试Android程序

5.创建定时任务

  Timer类--不适合后台长期运行的定时任务

  Alarm机制

6.Doze模式

7.多窗口模式

8.Lambda表达式

---恢复内容结束---

时间: 2024-12-31 14:17:14

第二行代码的相关文章

《第二行代码》来了

转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/52032038 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新. 回顾 <第一行代码>从出版到现在已经有两年多的时间了.当然,如果是从我开始写书的那天算起的话,时隔已经三年半之久了.回顾这三年半的时光,不得不感慨,Android 技术的发展真是日新月异. 记得在2013年我刚开始动笔写<第一行代码>的时候,Googl

开始看《第二行代码》及官方第一个例程学习(部分)

本来是想先看看官方的例子学的,结果第一个就碰到问题了...果然有点不合适,上网找了一些书籍,发现第一行代码不错,可惜是基于eclipse的,偶然看到出第二版了,还基于Android studio  我立马决定照着这本教材学!!!开始之前我就想先找找书上例子的源码,结果发现书上开头几页已经写了网址了,去github找到后就是复制链接 然后下载git,用Android studio 导入进去,具体上网搜,导入进去之后可能会有一点错误,反正我的是有些东西没装,点下面错误里的内容就自动安装能直接编译运行

《第一行代码》BroadcastBestPractice中出现的问题及解决方案(关于AlertDialog系统对话框的使用)

该程序为<第一行代码>中的一个小demo,意在学习使用广播实现强制下线功能. 按<第一行代码>中的源码编写ForceOfflineReceiver类,用于接收广播并处理,代码如下: public class ForceOfflineReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { AlertDialog.Builde

从4行代码看右值引用

从4行代码看右值引用 概述 右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是这样的: int i = 0; int& j = i; 这里的int&是对左值进行绑定(但是int&却不能绑定右值),相应的,对右值进行绑定的引用就是右值引用,他的语法是这样的A&&,通过双引号来表示绑定类型为A的右值.通过&&我们就可以很方便的绑定右值了,比如我们可以这样绑定一个右值: int&

知物由学 | 只要5行代码,就可以实现AI图像识别

"知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物由学"希望通过一篇篇技术干货.趋势解读.人物思考和沉淀给你带来收获的同时,也希望打开你的眼界,成就不一样的你. 本文作者:Moses Olafenwa,DeepQuest AI的联合创始人和CEO:译者:徐驰骋. 导语:在这篇文章中,我们将简要介绍人工智能领域,特别是计算机视觉领域中遇到的挑战,这些

第一行代码 Android 第二版到货啦

今日android第一行代码[第二版]已到,收获的季节到了 先看一下封面 书签: 以后就把空闲时间送给它吧 先来看一下本书的目录: 第1章 开始启程--你的第1行Android代码 第2章 先从看得到的入手--探究活动 第3章 软件也要拼脸蛋--UI开发的点点滴滴 第4章 手机平板要兼顾--探究碎片 第5章 全局大喇叭--详解广播机制 第6章 数据存储全方案--详解持久化技术 第7章 跨程序共享数据--探究内容提供器 第8章 丰富你的程序--运用手机多媒体 第9章 看看精彩的世界--使用网络技术

js280行代码写2048

2048 原作者就是用Js写的,一直想尝试,但久久未动手. 昨天教学生学习JS代码.不妨就做个有趣的游戏好了.2048这么火,是一个不错的选择. 思路: 1. 数组 ,2维数组4x4 2. 移动算法,移动后有数字的对齐,无数字(我用的0,但不显示)补齐. 移动前 移动后(注意程序合并了第一行2个2,并产生了新的2) 移动算法分2步: 第一步骤:移动 第二步骤:合并 移动代码参考: function left(t,i) { var j; var len = t[i].length; for (j=

将文本框内容添加到表格中的行代码实例

将文本框内容添加到表格中的行代码实例:在实际操作中,往往需要将文本框中的内容添加到表格的行中或者类似的情况,下面就通过一个实例介绍一下如何实现此效果,希望能够对需要的朋友有所帮助,代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/&

每行代码值多少钱

我知道,"line of code"(LoC)是一种非常愚蠢的计量方式.不要急着喷我,请大家先听我讲讲我最近参与的两个项目,看一下一些非常有意思的数字. 项目#1:传统的同地协作 第一个项目是由一组程序员通过传统的同地协作来执行的.人数为20(不包括项目经理.分析人员.产品负责人.SCRUM大师等等).该项目是一个大流量的网络拍卖网站(每天有超过200万的页面访问量). 代码库的大小约为20万行,其中15万是PHP,3万5是JavaScript,其余则是CSS.XML以及Ruby等.这