Activity的功能定位
·Activity通常用于处理UI相关的操作,例如UI控件的加载,配置及响应等等。
·从理论上说,在Activity中可以完成所有任务的处理,包括下载文件等,但并不是最合适的做法。
应用程序的启动流程
1.系统将解析该应用程序的AndroidManifest.xml文件,尝试检索入口Activity;
2.运行入口Activity的程序,即Activity的Java类,并自动调用onCreate()方法,在onCreate()方法执行的过程中,setContentView()方法被调用,则setContextView()的参数对应的布局被加载,完成界面的初始化。
AndroidManifest.xml与系统组件
在Android系统中存在4个系统组件,分别是:Activity、Service(服务)、ContentProvider(内容提供者)、BroadcasetReceiver(广播接收者),这些系统组件将由Android系统对它们进行管理和维护,开发人员不需要,也
无权维护,但它们必须在AndroidMannifest.xml文件中的”application“节点下进行配置,通常称之为注册。
注意:BroadcastReceiver存在动态注册的方式,因此它不一定是在AndroidManifest.xml中注册的。
激活Activity
Activity作为Android中的系统组件,其实例的创建、销毁过程都是由系统完成的。
每次Activity被显示,都有可能是”创建实例 ->显示”或者是”实例已存在,直接显示”的过程,启动Activity,也被称为激活Activity。
注:即使某个Activity已被显示了,也就是实例已经被创建了,也可能因为系统资源不足时被系统销毁,所以在开发人员也无法知晓在某一时刻Activity的实例是否存在。
在Android中,激活系统组件需要使用Intent对象。
Intent(意图)在Android系统中主要用于:
- 激活系统组件;
- 在组件之间传递数据。
使用Intent激活Activity的步骤:
1、创建Intent对象,并通过构造方法Intent(Context packageContext,Class《?》 cls)设置需要激活的Activity;
2、调用startActivity(Intent intent)方法。
带返回值的Activity
在启动源中,需要调用startActivityForResult()方法激活新的Activity.
public void startActivityForResult(Intent intent,int requestCode)
参数: intent – 意图
requestCode —请求码(返回身份的标志)
当被启动的Activity返回结果时,启动源的onActivityResult()方法会被回调。
protected void onActivityResult(int requestCode,int resultCode,Intent data)
参数: requestCode – 请求码
resultCode – 返回结果编码
data – 意图对象
在被启动的Activity中,开发人员应该将数据添加(封装)到Intent对象中,并调用setResult()方法。
public void setResult(int resultCode,Intent data)
在被启动的Activity结束时,启动源中的onActivityResult()方法被回调,结束Activity可调用finish()方法。
public void finish()
关闭Activity
当开发人员确定Activity已经不需要再次使用时,可以调用finish()方法结束当前Activity。
当调用finish()方法时,Activity的onDestroy()方法会被回调,开发人员可以重写该方法,并在该方法中实现释放资源的相关代码。
protected void onDestroy()
当Activity被关闭时,如果它是通过startActivityForResult()方法激活的,则启动源(激活它的Activity)的onActivityResult()方法被回调。
开发人员也可调用finishActivity()方法关闭Activity。
public void finishActivity(int requestCode)
该方法并不用于关闭自身,而是关闭通过startActivityForResult()激活的Activity,由于startActivityForResult()激活的Activity可能有多个,所以能被该方法关闭的Activity也可以有多个,finishActivity()的参数即为调用startActivityForResult()时的参数requestCode。
如果requestCode可以匹配多个Activity,则这些Activity将被全部关闭。
关闭当前应用程序所有的Activity
定义一个应用程序级别的全局变量,使用集合类型记录下每个启动过的Activity,当需要全部关闭时,遍历该集合逐一关闭即可。
示例:
package com.example.result_code_activity;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
public static final int RESULTCODE = 9527;
private TextView tvContent;
private Button btnlogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnlogin = (Button) findViewById(R.id.button1);
tvContent = (TextView) findViewById(R.id.textView1);
OnClickListener btnOnClickListener = new btnOnClickListener();
btnlogin.setOnClickListener(btnOnClickListener );
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == RESULTCODE && resultCode == RESULT_OK){
String user = data.getStringExtra("user");
tvContent.setText(user);
tvContent.setVisibility(View.VISIBLE);
btnlogin.setVisibility(View.GONE);
}
}
private class btnOnClickListener implements OnClickListener{
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, ScountActivity.class);
startActivityForResult(intent, RESULTCODE);
}
}
}
package com.example.result_code_activity;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
public class ScountActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scount);
findViewById(R.id.btn_login_submint).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EditText edLoginName = (EditText) findViewById(R.id.et_login_name);
String userName = edLoginName.getText().toString();
Intent intent = new Intent();
intent.putExtra("user", userName);
setResult(RESULT_OK, intent);
finish();
}
});
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:text="登录/注册" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/button1"
android:layout_alignBottom="@+id/button1"
android:layout_centerHorizontal="true"
android:textSize="43sp"
android:visibility="gone"
android:text="TextView" />
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/button1"
android:layout_marginTop="60dp"
android:src="@drawable/num18" />
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".ScountActivity" >
<EditText
android:id="@+id/et_login_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="30dp"
android:layout_marginTop="16dp"
android:ems="10" >
<requestFocus />
</EditText>
<EditText
android:id="@+id/et_login_password"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/et_login_name"
android:layout_below="@+id/et_login_name"
android:ems="10"
android:inputType="textPassword" />
<Button
android:id="@+id/btn_login_submint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/et_login_password"
android:layout_marginTop="18dp"
android:text="Button" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/btn_login_submint"
android:layout_below="@+id/btn_login_submint"
android:layout_marginTop="35dp"
android:text="还没有账号?赶快注册一个吧!" />
</RelativeLayout>