前言

距离上次写博客已经快有十天了,中间因为毕业设计和中期答辩耽误了几天,今天又重新操起旧业拿出我的电脑来敲敲打打。

四大组件

四大组件分别为Activity(活动,与用户交互界面),Service(服务,后台运行服务,不提供界面呈现),Content Provider(内容提供器,实现应用之间的数据共享),Broadcast Receiver(广播,为了进行系统级别的消息通知,引入广播消息机制,应用程序可以对感兴趣的广播进行注册接受相关广播类)。

Activity的生命周期

1,几个状态

活动状态:当前Activity位于前台,用户可见,可以获得焦点。

暂停状态:其他Activity位于前台,该Activity可见,不能获得焦点。

停止状态:该Activity不可见,不能获得焦点。

销毁状态:该Activity结束。

2,生命周期方法

onCreate:创建Activity时被回调

onStart:启动Activity时被回调

onRestart:重新启动Activity时被回调

onResume:显示可见Activity时被回调

onPause:暂停Activity时被回调

onStop:停止Activity时被回调

onDestroy:销毁Activity时被回调

启动Activity运行的生命周期函数为

onCreate,onStart,onResume

按back键返回运行的生命周期函数为

onPause,onStop,onDestroy

按home键运行的生命周期函数为

onPause,onStop

然后再次进入运行的生命周期函数为

onRestart,onStart,onResume

Activity之间的跳转

显式跳转:优点,性能高,可读性强,目标Activity唯一。缺点,产生强耦合,目标Activity写死,不够灵活。

隐式跳转:优点,避免了强耦合,可由后端字符串吐出,灵活可配。缺点,跳转时目标Activity不唯一,出现跳转异常。

下面就是隐式和显式跳转的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
在AndroidManifest.xml中修改以下配置
<activity android:name=".Main2Activity"> //name必须和要跳转到的Activity的名字相同
<intent-filter>
<action android:name="abc" /> //name随意取
<category android:name="def" />
<category android:name="android.intent.category.DEFAULT" /> //必须要有这一条
</intent-filter>
</activity>

这是xml布局 只给出一部分
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="显式跳转" />

<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="隐式跳转" />

<Button
android:id="@+id/btn3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="隐式跳转百度" />

//显式跳转
Button btn = findViewById(R.id.btn);//根据id获取button按钮
btn.setOnClickListener(new View.OnClickListener() {//对button按钮设置点击监听
@Override
public void onClick(View v) {//当点击button按钮时跳转页面
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);//启动Activity
}
});


//隐式跳转
Button btn2 = findViewById(R.id.btn2);
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction("abc"); //匹配action的name
intent.addCategory("def");//匹配除了默认category以外的category名
startActivity(intent);
}
});



/**
* 根据隐式跳转的优缺点可以看出,隐式跳转一般不适用于activity之间的跳转
* 隐式跳转多用于打开内置(如浏览器等)
*/
Button btn3 = findViewById(R.id.btn3);
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
/**
* 用于显示用户的数据。比较通用,会根据用户的数据类型打开相应的Activity。
* 比如tel:13400010001打开拨号程序,http://www.baidu.com则会打开浏览器
*/
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});