安卓笔记 - HHDSG/Notepad GitHub Wiki

第一行代码 Android 第二版

Chapter 2

活动的生命周期

  • onSaveInstanceState()回调方法,保证活动被回收前调用,携带一个Bundle类型的参数

活动的启动模式

  • 4中standard、singleTop、sigleTask、singleInstance 通过属性android:launchMode指定
  • standard模式: 系统不关注这个活动在返回栈中是否存在,每次启动都会创建一个新的实例
  • singleTop模式: 这个活动在返回栈栈顶,不会再创建新的活动实例,如果不在栈顶,还会创建实例
  • sigleTask模式: 系统首先检查返回栈中是否有该活动实例,如果有则直接使用,并把这个活动之上的活动全部出栈,如果没有则创建
  • singleInstance: 启用一个新的返回栈来管理这个活动,确保单例

活动的最佳实践

知晓当前是哪一个活动

刚进入一个公司就正好一个新项目启动的概率并不高,阅读别人代码的时候有一个头疼的问题,就是当你需要在某个界面修改一些非常简单的东西时,却半天到不到这个界面对应的活动。

  • 定义一个继承自AppCompatActivity的基类BaseActivity,基类的onCreate方法中打印当前类getClass().getSimpleName(),之后所有的Activity都继承这个基类,这样每进入一个活动界面就会打印该活动类名。

随时随地退出程序

  • 定义一个list管理所有活动,退出时finish这个list中的所有活动就可以直接退出应用,不用连续按多次后退;可以在销毁所有活动后再杀掉当前进程以保证程序完全退出。详情见2.6.2 android.os.Process.killProcess(android.os.Process.myPid())

启动活动的最佳写法

  • 封装创建Activity的代码 详见2.6.3

public static void actionStart(Context context, String data1, String data2); SecondActivity.actionStart(FirstActivity.this, "data1","data2")

Chapter 3

常用控件

@+id/ 添加id; R.id.button;

所有控件都有android:layout_width android:layout_height match_parent wrap_content包裹内容

TextView

Button

  • 布局文件里文字小写,最终展示大写:android:textAllCaps="false"

EditText

  • 提示性文字,输入时消失 android:hint="xxxx"
  • 限制输入框中输入文字的行数,超过文字会向上滚动 android:maxLines="2"
editText = (EditText)findViewById(R.id.edit_text);
String text = editText.getText().toString();

ImageView 展示图片

  • 图片通常放在以drawable开头的目录下
    imageView.setImageResource(R.drawable.img_2);//可以动态修改图片

ProgressBar

  • 圆形进度条
  • 所有安卓控件都有的可见属性:android:visubility visible(默认)、invisible、gone

AlertDialog

ProgressDialog

4种布局

线性布局 LinearLayout

  • android:layout_gravity:用于指定控件在布局中的对齐方式
  • android:gravity:用于指定文字在控件中的对齐方式
  • android:layout_weight: 允许我们使用比例的方式指定控件大小

相对布局 RelativeLayout

帧布局 FrameLayout

百分比布局

  • 需要在项目的build.gradle中增加百分比布局依赖 ###自定义控件
  • 引入布局 在布局xml中 <include layout="@layout/title"/>
  • 添加自定义控件时,我们需要指定控件的完整类名,包名不能省略

最常用和最难用的控件 ListView 上下滑动

Chapter 4

  • FragmentTransaction提供了一个addToBackStack()的方法,用于将一个事务添加到返回栈中
  • 活动获取碎片实例:findFramentById()
  • 碎片获取活动实例:getActivity()

Chapter 10

  • 服务启动后会一直保持运行状态,虽然每调用一次startService(),onStartCommand()就会执行一次,但是,每个服务都只会存在一个实例;只需要调用一次stopservice()或者stopSelf()就可以停止服务。
  • 只要调用方和服务的连接没有断开,服务就会一直保持运行状态。
  • 如果活动被销毁,一定要记得对服务进行解绑,不然后可能造成内存泄漏。
  • IntentService集开启线程和自动停止于一身
  • 使用intentd传递对象 1、serialization方式 2、Parcelable方式
  • 定时任务 1、Alarm方式 安卓 set()、setExact() 2、Doze模式
  • 只要是接口中只有一个待实现方法,都可以使用Lambda表达式来编写
  • git fetch origin master 会将远程仓库的代码同步到本地,但不合并到任何分支,只是放到一个origin/master的分支上,可以通过diff命令查看远程仓库到底修改了什么 git diff origin/master. 之后再使用git merge origin/master将origin/master分支的修改合并到主干。而pull命令是将fetch和merge合并了

⚠️ **GitHub.com Fallback** ⚠️