回头看些许唏嘘,还有好多都有遗漏。
AndroidMainfest.xml的默认配置说明
1 | <application |
Activity生命周期
活动的生存期
Activity类中定义了7个回调方法
onCreate() 。会在活动第一次被创建的时候调用。在这个方法中完成活动的初始化操作,比如说加载布局、绑定事件等。
onStart() 。在活动由不可见变为可见的时候调用。
onResume() 。在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。
onPause() 。在系统准备去启动或者恢复另一个活动的时候调用。通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。
onStop() 。在活动完全不可见的时候调用。它和onPause() 方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么onPause() 方法会得到执行,而onStop() 方法并不会执行。
onDestroy() 。在活动被销毁之前调用,之后活动的状态将变为销毁状态。
onRestart() 。这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。
除了onRestart() 方法,其他都是两两相对的,从而又可以将活动分为3种生存期
完整生存期
活动在onCreate() 方法和onDestroy() 方法之间所经历的,就是完整生存期。一般情况下,一个活动会在onCreate() 方法中完成各种初始化操作,而在onDestroy() 方法中完成释放内存的操作。
可见生存期
活动在onStart() 方法和onStop() 方法之间所经历的,就是可见生存期。在可见生存期内,活动对于用户总是可见的,即便有可能无法和用户进行交互。我们可以通过这两个方法,合理地管理那些对用户可见的资源。比如在onStart() 方法中对资源进行加载,而在onStop() 方法中对资源进行释放,从而保证处于停止状态的活动不会占用过多内存。
前台生存期
活动在onResume() 方法和onPause() 方法之间所经历的就是前台生存期。在前台生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行交互的,我们平时看到和接触最多的也就是这个状态下的活动。
'activity supporting action_view is not set as browsable'的解决方法
1 | <activity android:name=".ThirdActivity"> |
让自己的activity可以响应http的action。但是这样编译不通过,显示:
1 | activity supporting action_view is not set as browsable |
要把这个activity设为brosable,那就多加一个category
1 | <activity android:name=".ThirdActivity"> |
创建空Activity
修改默认build.gradle
build.gradle 外部依赖
引入阿里云maven
1 | buildscript { |
app/build.gradle
最小sdk用16,小于16则需要手动建立程序代码与布局,并手动建立代码与布局之间的关系
1 | defaultConfig { |
建好后,重新编译,并sync代码
创建布局
建立布局目录
app/src/main/res,右键建立布局目录,目录名称layout
建立布局文件
app/src/main/res/layout,右键建立布局文件
创建Activity代码
点击app/src/main/java/程序目录
右键新增,EmptyActivity,输入活动名称
sdk小于16,需要点击Gallery,选择。否则点击Empty Ativity。 |
如果是系统建立的活动名称,各种包以及引入,SDK<16的情况,则需要的手工引入
引入的包
1 | import android.os.Bundle; |
默认构造类,需要继承AppCompatActivity类
1 | public class FirstActivity extends AppCompatActivity { |
修改配置文件
编辑AndroidManifest.xml
增加活动,增加Intent信息传递,设置该活动为主活动,并为默认活动
1 | <application |
重新构建项目,运行APP
intent消息传递
作用
给各个服务传递消息
分类2类
Intent(Context packageContext, Class)
这个构造函数接收两个参数,第一个参数Context 要求提供一个启动活动的上下文,第二个参数Class 则是指定想要启动的目标活动,通过这个构造函数就可以构建出Intent 的“意图”。
类似传递工具,将当前启动活动,目标下一个启动活动,作为构造函数的参数,生成一个intent对象。
通过startActivity方法启动这个链接器,启动目标活动。
Activity类中提供了一个startActivity() 方法,这个方法是专门用于启动活动的,它接收一个Intent 参数
显式传递
1 | Button button2 = findViewById(R.id.button_2); |
隐式传递
1 | Button button2 = findViewById(R.id.button_2); |
调用组件传递
通过view和dial等不同组件,传递不同功能的数据
1 | Button button2 = findViewById(R.id.button_2); |
指定了Intent的action 是Intent.ACTION_VIEW ,这是一个Android系统内置的动作,其常量值为android.intent.action.VIEW 。然后通过Uri.parse() 方法,将一个网址字符串解析成一个Uri 对象,再调用Intent的setData() 方法将这个Uri 对象传递进去。
传递数值
Activity之间正向传输数据
递送端
1 | //设定传送数值 |
接受端
1 | //新建传送,根据传送端设定的key获取值,通过提示框显示 |
Activity之间反向传输数据
从接受端传输给发送端并销毁自身
- 发送端
1 | //startActivityForResult() 方法接收两个参数,第一个参数还是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源 |
- 接受端
1 | // 建立专递,设定活动传递,并设定改活动要传递的值,设定活动要传递的位置是前一个Activity,并且这个Activity专递过来是状态OK,同时将这个值也设定,并送出。 |
- 发送端
1 | // 重写Activity的获取状态方法,判断requestCode,判断是否为启动时传出的设定值 |
Android 黄色报错 App is not indexable by Google Search
在activiy中增加
1 | <action android:name="android.intent.action.VIEW" /> |
在app的build.gradle的android{ }中添加代码:
1 | lintOptions { |
Android Studio里Gradle Sync 国内镜像
项目配置文件build.gradle,添加阿里云Gradle镜像
1 | / Top-level build file where you can add configuration options common to all sub-projects/modules. |
Android Studio 配置
加速下载更新
默认下载从 谷歌官网下载,速度很慢,可以通过添加代理的方式加速更新
代理网址: http://mirrors.neusoft.edu.cn/
具体步骤
- 设置自动更新代理
- 设置强制更新
SDK位置修改
Android 开发可基于不同的SDK版本进行调试,随着不同版本的SDK的安装的增多,导致磁盘容量占用持续增大,原本的默认安装位置无法满足磁盘。此时将SDK安装目录移动至合适的位置。
模拟器磁盘不足
1 | cd ~/.android/avd |