Android开发基础读书笔记_1

0x00 前言

又看了一遍“第一行代码”的第二版,这次跟着书里面的代码随便敲了一下,顺便写一遍读书笔记

0x01 Android项目中的资源

src: 各种java程序在此,包括主程序
gen: 最重要的是R.java,所有res资源都在这里编号,通过R.xx.xx或@xx查询
res: 各种资源都在这里,包括drawable, layout, values等
另外还有menifest文件,统筹兼顾全局的,Android四大组件都要在此注册。

重点说一下gradle,这里有两个build.gradle目录,一个在项目的最外层,负责项目全局的构建,另外一个build.gradle在app模块的构建脚本,里面有超级多的构建配置,关于gradle会另外在自行学习一点

0x02 Activity

创建Activity步骤:
1、首先,在app目录右击创建一个空的activity,重写Activity的onCreate()方法
2、建立布局文件并关联,用setContentView(R.layout.myactivity)将布局加载进来。
3、所有四大组件的使用,都需要在AndroidManifest.xml文件中注册。AS自动帮我解决了,下面是手动方式
注册方法为:
中添加标签,将需要注册的activity使用android:name=”.MainActivity”注册。如果是主activity,即打开application时看到的activity,则需要添加


4、加一个button到新创建的activity,然后用toast对象的show方法进行输出提示

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1 = (Button)findViewById(R.id.button_1);

//建立一个button并调用Toast显示短信息
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Toast.makeText(MainActivity.this,"You click button_1",
Toast.LENGTH_SHORT).show();
}
});

0x03 Intent

  • 显式Intent

首先,按照上面的步骤重新创建一个SecondActivity(记得注册),采用Intent实现跳转

Button button2 = (Button)findViewById(R.id.button_2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Intent intent = new Intent(MainActivity.this,Main2Activity.class);
startActivity(intent);//使用显示intent调用Main2Activity
}
});
  • 隐式Intent

隐式Intent并不能实现直接跳转,需要指定两个条件(intent-filter):action和category。要两个同时匹配才能相应这个intent。

intent-filter在注册activity时添加,intentfilter中只能有一个action,但可以有多个category,满足其中一个category即可。

跳转方法为:

//使用隐式Intent调用第三个page,Category使用默认的,自定义的实验失败
Button button3 = (Button)findViewById(R.id.button_3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Intent intent = new Intent("com.example.rick7.rickapplication.ACTION_START");//使用隐式Intent,只传入一个自定义的动作名称
//intent.addCategory("com.example.rick7.rickapplication.MY_CATEGORY");
startActivity(intent);
}
});
  • 使用隐式Intent的系统内置方法,打开系统编写的activity,比如浏览器,打电话等

  • 使用Intent传递数据

//使用隐式Intent调用系统浏览器界面并打开百度,并传输数据到BrowserActivity
Button button4 = (Button)findViewById(R.id.button_4);
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
String data = "i want to open baidu";
Intent intent= new Intent(Intent.ACTION_VIEW);//传入系统内置动作ACTION_VIEW
intent.setData(Uri.parse("http://www.baidu.com"));//设置Intent携带的数据
intent.putExtra("extra_data",data);
startActivity(intent);
}
});

0x04 activity生存期

完整生存期:onCreate() -> onDestory()
可见生存期:onStart() -> onStop()
前台生存期:onResume() -> onPause()

生存周期

0x05 activity的启动模式

四种启动模式,可以在标签中android:launchMode定义。

  • standard:打开activity,就放入栈顶
  • singleTop:打开activity,检查栈顶是否已经存在该activity,存在了就不创建。不存在才创建。不过,如果该activity不在栈顶,但也存在,则也会重新创建一个。
  • singleTask:检查整个返回栈,如果存在某个activity,则不会重新创建。
  • singleInstance:创建一个activity,重新在一个新的返回栈(或Task)中创建,该activity与其他activity不在同一个Task中,其他程序也可以调用这个activity的实例。