Android应用程序主要由Activity,Service,Broadcast Receiver,Content Provider四大部分组成,也就是我们通常意义上说的四大容器。
1.Activity
Activity是可视界面的最底层,在它上面是一个Window对象,在上面是布局容器,之后才是用户进行操作的基本组件。
一个应用通常是由多个Activity组成的,当前活动的Activity处于栈的顶层。关于栈的使用方法,这里通过一个实例来体现。
实例
- List item
参考网页跳转栈操作即可
在进行Activity之间的跳转时,Activity的状态也会随之改变。Activity的状态主要有以下四种:
状态 | 描述 |
---|---|
活动 | 用户可正常交互 |
暂停 | 可见,不可交互 |
停止 | 不可见 |
销毁 | 被系统或应用杀死 |
-
完整的生命周期(从出生到死亡)
Activity初始化将会调用onCreate()方法,销毁时将会调用onDestroy()方法。 -
可见的生命周期(活动+暂停)
从调用onStart()方法开始到onStop()方法结束 -
前景生命周期(活动)
从调用onResume()到调用onPause()方法为止
强制单任务
当应用跳转后再次启动,可能会在手机上产生多个Activity实例,为了解决这个问题,我们只需在程序中加入
<activity android:launchMode="singleInstance"></activity>
当有多个Activity时
<application android:launchMode="singleTask"></application>
强制手机屏幕
强制纵向(还可以强制横向,这里不再给出)
android:screenOrientation="portrait"
进行该设置后,Activity在进行状态改变时,始终保持统一方向,但这并不能
防止应用程序重新启动,因此,我们还需要加入
android:configChanges="orientation|keyboardHidden"
其中orientation代表对屏幕方向进行处理,keyboardHidden代表对手机键盘滑出时进行处理,当程序响应以上事件时会调用onConfigurationChanged()
注:只加上面第一句,只能保证屏幕的方向,在我们颠倒手机屏幕后,Activity实际上是销毁后重建的,因此还需加上第二句
保存和恢复
在用户离开界面后,又重新回到该界面时会用到。
废话不多说,直接贴代码:
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
//重置数据
//这里得到用户之前输入的id
super.onRestoreInstanceState(savedInstanceState);
int id = savedInstanceState.getInt("editText_id");
}
//该方法在系统自动销毁Activity时会自动调用
@Override
protected void onSaveInstanceState(Bundle outState){
//保存数据
//这里保存用户输入的id
outState.putInt("editText_id",123);
super.onSaveInstanceState(outState);
}
Intent实例
Intent是实现Activity跳转的控件,我们可以使用startActivityForResult()和startActivity()方法实现多种跳转,其中startActivityForResult()能实现监控并获取返回值,我们只需要重写onActivityResult()就能实现对返回值进行处理
//跳转识别码,用于判断进行了哪一个跳转,自定义值即可
private static final int SPEECH_RECOGNIZE_CODE = 0x1010;
private static final int EXCHANGE_INFORMATION = 0x1011;
最简单的跳转
public void startnewActivity(){
//只进行了Activity跳转操作
Intent jump = new Intent(this,jumpedActivity.class);
startActivity(jump);
}
消息传递Intent跳转
public void startnewActivity(){
//跳转到自定义Activity,并传递消息
Intent jump = new Intent(this,jumpedActivity.class);
Bundle bun = new Bundle();
bun.putInt("id",140055);
jump.putExtras(bun);
startActivityForResult(jump,EXCHANGE_INFORMATION);
}
语音识别Intent跳转,带有返回值并进行处理
public void startnewActivity() {
//跳转到系统自带的语音识别Activity,获取语音信息并处理
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, SPEECH_RECOGNIZE_CODE);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "请来一场演讲吧");
startActivityForResult(intent,SPEECH_RECOGNIZE_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
//对应于上面第三种跳转
if(requestCode == SPEECH_RECOGNIZE_CODE && resultCode == RESULT_OK){
ArrayList<String> list
= data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
listenerText.setText(list.get(0));
}
//对应于上面第二种跳转
if(requestCode == EXCHANGE_INFORMATION && resultCode == RESULT_OK){
Bundle bun = data.getExtras();
String name = bun.getString("name");
listenerText.setText(name);
}
super.onActivityResult(requestCode, resultCode, data);
}
2. Service
- List item
3.Broadcast Receiver
- List item
4.Content Provider
- List item