Android底层-四大容器

本文详细介绍了Android应用程序的四大核心组成部分:Activity、Service、BroadcastReceiver和Content Provider。Activity作为可视界面的基础,拥有完整的生命周期;Service用于在后台执行任务;BroadcastReceiver则用于接收系统或应用广播事件;Content Provider则负责数据的共享和存储。文章通过实例解析了Activity的状态变化、Intent的使用以及如何进行屏幕方向的控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值