Activity使用详解

本文深入探讨了Android中的Activity组件,将其比喻为MP4的电影播放系统,阐述了Activity、Service、BroadcastReceiver和ContentProvider的角色。重点讲解了Activity的注册、与View的配合、继承关系、生命周期、启动模式、IntentFilter匹配规则以及存储结构,揭示了Activity如何在AndroidManifest.xml中配置以及在实际应用中的各种模式和场景。此外,还提到了Activity的显式和隐式调用,并通过示例展示了Intent的使用。
摘要由CSDN通过智能技术生成

四大组件概论
如果把四大组件比作MP4中的电影播放系统,那么要保证这个系统有基础功能则:

  • Activity是显示到屏幕上的电影画面—-能看到,还能交互(必须,即使没有播放电影也需要基础界面,交互有快进、音量操作等)。
  • Service是影音文件读取器—-看不到,但是没有他看不了电影(非必须,但对看电影这一操作来说是必须的)。
  • BroadcastReceiver是通知服务—-看不到,如果电量不足立刻发送广播弹窗提醒你(非必须,除了电量监测还可有其他服务)。
  • ContentProvider是获取系统时间服务—-看不到,通过访问系统时钟组件获取时间信息,时间非本程序功能(非必须,跨进程通信)。

Android四大组件,除了BroadcastReceiver,其他三种必学在AndroidManifest.xml 文件中注册,BroadcastReceiver既可以在AndroidManifest.xml文件中注册也可以在java代码中注册。在调用方式上Activity、Service、和BroadcastReceiver必须通过Intent调用,而ContentProvider不必。


Activity和View搭配显示布局:
Activity是我们最常见的一个组件,他与View搭配完成了界面的显示。我们初始创建helloworld应用的时候有setContentView(R.layout.activity_main)与一个activity_main.xml搭配来显示初始界面。其实我们还可以这样写:

public class MainActivity extends AppCompatActivity {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LinearLayout layout = new LinearLayout(this);
        setContentView(layout);
    }

就这样写就可以显示出一个空白界面的布局,不用要activity_main.xml 文件。其实我们分析一下,activity_main.xml里边也是一个LinearLayout布局,其实他们加载的是一样的。

Activity继承关系

java.lang.Object
   ↳    android.content.Context
       ↳    android.content.ContextWrapper
           ↳    android.view.ContextThemeWrapper
               ↳    android.app.Activity 
//直接或间接继承Context、ContextWrapper、ContextThemeWrapper类,可直接调用其方法
Known Direct Subclasses
 - AccountAuthenticatorActivity(账户管理界面的Activity), 
 - ActivityGroup,  
 - AliasActivity(启动其他Activity结束自己), 
 - FragmentActivity,  
 - ListActivity,  
 - NativeActivity(用c++写android的activity)

Known Indirect Subclasses
 - ActionBarActivity,  
 - AppCompatActivity,  
 - LauncherActivity(继承ListActivity,类列表界面),  
 - PreferenceActivity(继承后Activity托管系统读写参数,一般用于系统设置界面),  
 - TabActivity 

AS2.3新建项目我们发现默认继承AppcompatActivity,相比以往,Android5.0之后,supportV7更新包,使用了AppCompatActivity来代替ActionBarActivity,继承Activity会发现没有ActionBar的导航栏,继承ActionBarActivity会发现提示他已经过时了,所以AppCompatActivity是更新后Google推荐使用的,继承Activity和AppCompatActivity区别是Activity没有给你加载ActionBar支持,所以项目创建后AppCompatActivity的包要比Activity的大近10M左右。

Activity的显式配置
在AndroidManifest.xml文件中标签下声明我们的Activity,我们新建一个Activity,AS自动帮我们在下创建标签并声明好命名空间。

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:theme="@style/AppTheme"
            android:launchMode="singleInstance"
            android:exported="true"
          >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值