Android 4学习(6):概述 - 深入了解Android Activity

来源:互联网 发布:华科达网络监控软件 编辑:程序博客网 时间:2024/06/09 14:05

参考:《Professional Android 4 Application Development

深入了解Android Activity

每一个Android Activity都对应于一个用户界面(UI)。每个Android Application都有一个main Activity,而这个main Activity大多由多个Fragment组成,而这些Fragment后面往往都由一个或多个secondary Activity支持。当用户在不同的界面(窗口)切换时,Android会生成对应的新Activity

创建Activity

Android提供了Activity类,在编写自己的Activity时,程序员需要继承Activity并重载里面的方法。例如:

package cn.jubincn.activities;

import android.app.Activity;

import android.os.Bundle;

public class MyActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

}

}


空白的Activity对应的是一个空白屏幕,因此我们需要添加FragmentLayoutViewUI元素来定制自己的Activity。大部分Activity会占据整个屏幕,除此之外,还有一些半透明的Activity和浮动的Activity


Android应用程序中,用户交互界面和数据的显示是由View来提供的。Android中的layout类,也叫ViewGroup,可以将View打包进行管理。Fragment则用来组织界面元素,从而更方便地适配不同的界面。Activity设置界面的方法有两种,一种是创建View类,将其设置到Activity中;另一种是将layout文件设置到Activity中,然后Inflate对应的Activity


@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

TextView textView = new TextView(this);

setContentView(textView);

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

<activity android:label="@string/app_name" android:name=".MyActivity">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

Activity生命周期

Activity的生命周期可以决定Process的优先级,并且Activity需要对生命周期事件进行适当地响应才能提供更好的用户体验。

Activity Stacks

Activity的状态决定于它在Activity Stack中的位置。Activity Stack遵循Stack的“先进后出”的规则:当一个Activity刚被创建时,它会移到栈顶;若用户点击go back按钮,或关闭当前Activity时,栈顶的Activity会被弹出,第二个Activity成为新的栈顶Activity

Activity State

Activity的生命周期中,有这几种状态:

  • Active:在栈顶的Activity,具有最高的优先级,Android会竭力满足它对资源的需求。当其他Activity变为Active状态时,此Activity的状态会变为Paused
  • Paused:处于这个状态的Activity的部分或全部对用户可见,但无法接受用户的输入。
  • Stopped:当Activity对用户不可见时,它将转为Stopped状态。此时尽管Activity仍会保留在内存中,但当系统资源紧张时,它会被回收掉。
  • Inactive:Activity在启动之前,或被kill之后,处于Inactive状态。

监听并响应Activity State的变化

Activity需要在State发生变化时作出相应的反应,为此AndroidActivity的生命周期事件提供了很多相关的ActionHandler,下图展示了Activity的几个生命周期:

对应的代码:

package com.paad.activities;import android.app.Activity;import android.os.Bundle;public class MyStateChangeActivity extends Activity {// Called at the start of the full lifetime.@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// Initialize Activity and inflate the UI.}// Called after onCreate has finished, use to restore UI state@Overridepublic void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);// Restore UI state from the savedInstanceState.// This bundle has also been passed to onCreate. Will only be called if the Activity has been killed by the system since it was last visible.}// Called before subsequent visible lifetimes for an Activity process.@Overridepublic void onRestart(){super.onRestart();// Load changes knowing that the Activity has already been visible within this process.}// Called at the start of the visible lifetime.@Overridepublic void onStart(){super.onStart();// Apply any required UI change now that the Activity is visible.}// Called at the start of the active lifetime.@Overridepublic void onResume(){super.onResume();// Resume any paused UI updates, threads, or processes required// by the Activity but suspended when it was inactive.}// Called to save UI state changes at the end of the active lifecycle.@Overridepublic void onSaveInstanceState(Bundle savedInstanceState) {// Save UI state changes to the savedInstanceState.// This bundle will be passed to onCreate and onRestoreInstanceState if the process is killed and restarted by the run time.super.onSaveInstanceState(savedInstanceState);}// Called at the end of the active lifetime.@Overridepublic void onPause(){// Suspend UI updates, threads, or CPU intensive processes that don’t need to be updated when the Activity isn't the active foreground Activity.super.onPause();}// Called at the end of the visible lifetime.@Overridepublic void onStop(){// Suspend remaining UI updates, threads, or processing that aren’t required when the Activity isn’t visible.// Persist all edits or state changes// as after this call the process is likely to be killed.super.onStop();}// Sometimes called at the end of the full lifetime.@Overridepublic void onDestroy(){// Clean up any resources including ending threads,// closing database connections etc.super.onDestroy();}}