Android应用学习(一) Android四大核心组件

您所在的位置:网站首页 安卓的核心组件是什么软件 Android应用学习(一) Android四大核心组件

Android应用学习(一) Android四大核心组件

2024-07-06 22:12| 来源: 网络整理| 查看: 265

Android四大核心组件 Activity

Activity是Android应用程序核心组件中最基本的一种,是用户与应用程序交互的窗口。类似于一个网站中的网页,可以互相跳转,并且可以有返回值(相当于转发是添加参数或者返回值)。 当新打开一个视图时,之前的视图会被置为暂停状态,并被压入历史堆栈中。 Activity是由Android系统进行维护的,拥有自己的生命周期,如:

onCreate() :创建onStart() : 激活onResume(): 恢复onPause(): 暂停onStop(): 停止onDestroy(): 销毁onRestart(): 重启 Service

Service是Android系统中类似于Activity但是没有视图的程序,可以在后台运行很长时间,相当于操作系统中的一个服务。 Android定义了两种类型的Service,即本地和远程Service。本地Service是只能由承载该Service的应用程序访问的组件,而远程Service是供在设备上运行的其他应用程序远程访问的Service。 通过Context.startService(Intent service)可以启动一个Service,通过Context.bindService()可以绑定一个Service。

BroadcastReceiver

顾名思义,广播接收者适用于接受来自系统和其他应用程序的广播,并作出回应。 在Android系统中,当有特定时间发生时就会产生相应的广播,比如开机时系统会发送一条广播给应用,告知应用启动等。 BroadcastReceiver不能生成UI,通过NotificationManager来通知用户有事件发生,对于用户来说是隐式的。 BroadcastReceiver有两种注册方式:

在AndroidManifest.xml中进行静态注册在运行的代码中使用Context.registerReceiver()来进行动态注册。 只要注册了BroadcastReceiver,即使对应的广播事件来临时应用程序尚未启动,系统也会自动启动该应用程序对事件进行处理。同时,用户还可以通过Context.sendBroadcast()将自己的Intent对戏那个广播给其他应用程序 ContentProvider

文件,数据库等数据在Android系统内是私有的,仅允许被特定应用程序使用,在两个程序之间,数据的交换或者共享由ContentProvider实现。 ContentProvider类实现了一组标准方法的借口,从而能够让其他应用保存或者读取ContentProvider提供的各种数据类型。

Intent

Intent并不是Android应用程序核心组件,但是Activity,Service,BroadcastReceiver之间互相通信使用的消息使用的就是Intent。

Activity解读

一个Android程序通常由多个Activity组成,但是其中只有一个MainActivity,相当于java中的main方法。

Activity的生命周期

本质上讲,activity在生命周期中一共存在三个状态

运行态:指activity运行在屏幕最上层并获得了用户焦点暂停态:指当前activity依然存在,但是没有获得用户焦点。处于暂停态的activity保留了自己所使用的内存和用户信息,但是在系统极度缺乏资源的状态下,有kennel会被杀死释放资源。停止态: 指当前activity完全被处于运行态的activity遮挡住,用户完全不能看见该界面。处于停止态的activity依然存活,也保留了自己使用的内存和用户信息,但是一旦系统缺乏资源,停止态的activity会被杀死释放资源。 方法调用说明onCreate(Bundle savedInstanceState)创建Activity时调用。在该方法中,还会以Bundle的形式提供对以前存储的任何状态的访问,其中参数savedInstanceState对象是用于保存Activity的对象状态onStart()activity在屏幕上变得用户可见是调用onResume()activity开始与用户交互时使用,无论是启动还是重启一个activity,该方法总是会被调用onPause()当Android喜用要激活其他activity时,该方法被调用,暂停或者收回CPU和其他资源时调用onStop()activity被停止并且转为不可见阶段时调用onRestart()重新启动已经停止的activity时调用onDestroy()activity被完全从系统内存中移除时使用。该方法被调用可能是因为有人直接调用finish方法或者系统决定停止该活动以释放资源 activity生命周期解释

上述七个生命周期方法分别在四个阶段按照一定的顺序进行调用:

启动activity:依次执行onCreate(),onStart(),onResume()activity失去焦点:依次执行onPause(),onStop()activity重获焦点:依次执行onRestart(),onStart() ,onResume()关闭activity:依次执行onPause(),onStop(),onDestroy() 请添加图片描述 Activity组件

每个android应用都有一个主Activity,相当于java中的main方法。多个Activity可以直接相互调用以完成不同的工作,当新的Activity被启动的时候,之前的Activity会停止,但是不会被销毁,而是被压入Back Stack的栈顶,当用户点击Back按钮时,当前的Activity会被销毁,原先的Activity会被从Back Stack的栈顶弹出并激活。当Activity状态发生改变的时候,都会通过状态回调函数同志Android系统。

Activity的创建 新建类 创建一个新的Activity,必须创建Android.app.Activity的一个子类,并且重写onCreate()方法。关联布局XML文件 在新建的Activity中设置其布局方式,需要在res/layout目录中新建一个XML布局文件。可以通过setContentView()方法来指定Activity的用户界面的布局文件,如setContentView(R.layout.activity_jarvis)注册 在AndroidManifes.xml文件中对建立的Activity进行注册,即在application标签下添加activity标签 对于主Activity,需要为其添加标签 表示该activity作为主Activity出现 表示该Activity会被显示在最上层的启动列表中 Activity的启动

在Android系统中,除了主Activity由系统启动以外,其他的Activity都需要由应用程序来启动。

通常情况下,需要使用starActivity()方法来启动Activity,而要启动的Activity的信息由Intent对象来传递,如: //表示通过当前的Activity来启动AnotherActivity Intent intent = new Intet(this , AnotherActivity.class); startActivity(intent); 有时,用户不需要知道需要启动的Activity的名称,而可以仅制定要完成的行为,由Android系统来为用户挑选合适的Activity: Intent intent = new Intent(Intent.ACTION_SEND); //Intent.EXTRA_EMAIL中放置的是recipientArray中存储的要发送的Email的目标地址,该Intent对象starActivity方法启动后,Android系统会启动相应的Email处理应用程序,并将Intent.EXTRA_EMAIL中的内容放到邮件的目标地址中 intent.putExtra(Intent.EXTRA_EMAIL,recipientArray); startActivity(intent); 当需要从启动的Activity获取返回值时,需要使用startActivityForResult(),并实现onActivityResult()方法来获取返回值。如: Intent intent = new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI); startActivityForResult(intent,PICK_CONTACT_REQUEST); 关闭Activity

关闭Activity使用finish()方法,关闭之前启动过的其他Activity可以使用finishActivity()方法。虽然Android SDK提供了这些方法,但是通常情况下不建议使用其去强制关闭某个Activity。因为Android系统在为用户维护Activity的生命周期,可以动态的回收和重建Activity,因此Activity应该交给Android系统来管理。

Activity数据传递

Activity数据传递共有三种形式

通过Intent传递一些简单数据 //Activity1中传递数据 Intent intent = new Intent(Activity1.this , Activity2.class); intent.putExtra("author","jarvis");//在Intent中添加键值对 Activity1.this.startActivity(intent); //在Activity2中获取传递过来的数据 Intent intent = getIntent();//获取传递过来的Intent String value = intent.getStringExtra("author"); 通过Bundle传递相对复杂的数据或者对象 //Activity1中传递数据 Intent intent = new Intent(Activity1.this , Activity2.class); Bundle bundle = new Bundle(); bundle.putString("author","jarvis"); intent.putExtras(bundle); Activity1.this.startActivity(intent); //在Activity2中获取传递过来的数据 Intent intent = getIntent();//获取传递过来的Intent Bundle bundle = intent.getExtras(); String value = bundle.getString("author"); 通过startActivityForResult方法可以更方便的进行来回传递数据 //Activity1中向Activity2传递数据 final int REQUEST_CODE = 1; Intent intent = new Intent(Activity1.this , Activity2.class); Bundle bundle = new Bundle(); bundle.putString("author","jarvis"); intent.putExtras(bundle); starActivityForResult(intent,REQUEST_CODE); //同时Activity1还要重载onActivityResult方法,用于接受回调传回来的数据 protected void onActivityResult(int requestCode , int resultCode , Intent intent){ if(requestCode == this.REQUEST_CODE){ if(resultCode == 1){ Bundle bundle = intent.getExtras(); String value = bundle.getString("res"); } } } //在Activity2中接受数据并且处理后回传 Intent intent = getIntent(); Bundle bundle = intent.getExtras(); String value = bundle.getString("author"); Intent resIntent = new Intent(); Bundle resBundle = new Bundle(); resBundle.putString("res","jarvis"); resIntent.putExtras(resBundle); Activity2.this.setResult(1 , resIntent); finish();//结束当前activity


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3