Android学习笔记四之Activity

Android四大组件之Activity

1、什么是Activity

  Activity是Android四大组件之一,用于显示View。Activity是一个应用程序组件,提供一个用户交互的接口,其本身是没有界面的,Activity类创建一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,也可以小于屏幕而悬浮于其他窗口之上。

  开发者可以通过Activity类提供的setContentView(View)接口将View放到Activity创建的窗口上。一个程序一般由多个Activity组成,他们通常是松耦合关系。一个Activity可以启动另外一个Activity。每次一个Activity启动,前一个Activity就停止,但是Android系统会保留Activity在一个栈上,当用户完成当前Activity然后点击back按钮时,它就会被弹出栈并被销毁。所有的Activity类必须在AndroidManifest.xml文件中注册,不注册会报错。例如:

    <activity android:name=".BaseActivity" />
    <activity android:name=".activity.AboutCSDNActivity" />
    <activity android:name=".activity.BlogOsphereActivity" />
    <activity android:name=".activity.FeedBackActivity" />
    <activity android:name=".activity.WebActivity" />
    <activity android:name=".activity.AllBloggerActivity" />
    <activity android:name=".activity.BlogDetailActivity" />

2、activity的生命周期方法

下图是Android api中所提供的Activity生命周期图

由图可以看出,Activity有如下生命周期方法,分别是:

  public class Activity extends ApplicationContext {

  protected void onCreate(Bundle savedInstanceState);

  protected void onStart();

  protected void onResume();

  protected void onPause();

  protected void onStop();

  protected void onDestroy();

 }

  一个Activity启动,执行生命周期方法顺序是:onCreate -> onStart -> onResume;当一个Activity被Kill掉时候,执行生命周期方法顺序是:onPause -> onStop -> onDestroy。这是一个完整的生命周期循环。当一个应用正在运行,由于其它应用中断,比如电话来了等,执行的生命周期方法是onPause -> onStop,挂断电话恢复到当前应用,执行的生命周期方法是onStart -> onResume;如果当前应用的Activity是Theme为Translucent(半透明)或者Dialog时,那么中断就是onPause ,恢复的时候onResume。

2.1、各种生命周期方法在系统中的作用
  • onCreate方法:在这里创建界面,可以实现一些界面的初始化工作
  • onStart方法:在onCreate方法之后被调用,或者Activity从stop状态转换为Active状态被调用,可以实现数据的请求
  • onResume方法:在 Activity 从 Pause 状态转换到 Active 状态时被调用。
  • onPause方法:在 Activity 从 Active 状态转换到 Pause 状态时被调用。在这里可以保存一些数据,在onResume方法中可以读取这里保存的数据。
  • onStop方法:在 Activity 从 Active 状态转换到 Stop 状态时被调用。一般我们在这里保存 Activity 的状态信息。
  • onDestroy方法:在 Activity 被结束时调用,它是被结束时调用的最后一个方法,在这里一般做些释放资源,清理内存等工作。

onPause,onstop, onDestroy,三种状态下 activity都有可能被系统kill掉

2.2、Activity的四种状态

Activity有四种状态分别是:

  • Running状态
  • Stopped状态
  • Paused状态
  • Destroyed状态

生命周期方法在各个状态被调用时机如下图:

由上图可以看出:

  • 当Running状态的时候,调用onPause方法可以切换到Pauseed状态。
  • 当在Paused状态的时候,调用onResume方法可以切换到Running状态,调用onStop方法可以切换到Stopped状态,如果应用被退出就切换到Destroyed状态。
  • 当处在Stopped状态时候,调用onRestart方法、onStart方法、onResume方法会切换到Running状态,调用onDestroy方法或者应用被退出就会切换到Destroyed状态。

3、Activity之间的通信

  在 Android 中,不同的 Activity 实例可能运行在一个进程中,也可能运行在不同的进程中。因此我们需要一种特别的机制帮助我们在 Activity 之间传递消息。Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内容。对于一个 Intent 对象,消息“目的地”是必须的,而内容则是可选项。

  Intent负责对操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。

  在应用中,我们可以通过两种形式来使用Intent:

  直接Intent:指定了component属性的Intent(setClass(Context, Class)来指定)。通过指定具体的组件类,通知应用启动对应的组件。

  间接Intent:没有指定comonent属性的Intent。这些Intent需要包含足够的信息,这样系统才能根据这些信息,在在所有的可用组件中,确定满足此Intent的组件。
对于直接Intent,Android不需要去做解析,因为目标组件已经很明确。

  Android需要解析的是那些间接Intent,通过解析,将 Intent映射给可以处理此Intent的Activity、IntentReceiver或Service。Intent解析机制主要是通过查找已注册在AndroidManifest.xml中的所有IntentFilter及其中定义的Intent,最终找到匹配的Intent。

通过setClass传递消息:

 Intent intent =new Intent(CurrentActivity.this,OtherActivity.class);
 Bundle bundle =new Bundle();
 bundle.putBoolean("boolean_key", true);
 bundle.putString("string_key", "string_value"); 
 intent.putExtra("key", bundle);
 startActivity(intent);

另一个Activity解析消息:

Intent intent =getIntent(); 
 Bundle bundle =intent.getBundleExtra("key"); 
 bundle.getBoolean("boolean_key");
 bundle.getString("string_key");

除了使用intent之外还可以使用sharedpreference传递消息:

 // 写入 SharedPreferences 
 SharedPreferences preferences = getSharedPreferences("name", MODE_PRIVATE); 
 Editor editor = preferences.edit(); 
 editor.putBoolean("boolean_key", true); 
 editor.putString("string_key", "string_value"); 
 editor.commit(); 

 // 读取 SharedPreferences 
 SharedPreferences preferences = getSharedPreferences("name", MODE_P
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值