Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)之一。在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Android 中的页面跳转即是从一个 Activity 跳转到另外一个Activity ,在 Android 中 Activity 拥有四种基本状态:
1.Active/Runing
一个新 Activity 启动入栈后,它显示在屏幕最前端,处理是处于栈的最顶端(Activity栈顶),此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态(active or running)。
2.Paused
当 Activity失去焦点, 被一个新的非全屏的Activity 或者一个透明的Activity 被放置在栈顶,此时的状态叫做暂停状态(Paused)。此时它依然与窗口管理器保持连接,Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被强行终止掉。所以它仍然可见,但已经失去了焦点故不可与用户进行交互。
Stoped
如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被强行终止掉。
Killed
如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接终止它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。
Android 中页面跳转大致分为三种情形:
1.从 A 跳转到 B ,不带任何参数传递;
2.从 A 跳转到 B ,带有参数传递;
3.从 A 跳转到 B ,A 接受 B 返回的数据并且做出相应处理;
我们使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,然后新的Activity使用setResult(int resultCode)只返回结果不带数据,或者setResult(int resultCode, Intent data)两者都返回!当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。
requestCode,请求码:请求码的值是根据业务需要由自已设定,用于标识请求来源。
例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity,不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。
使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity在onActivityResult()方法,如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理。
resultCode,结果码:在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity,在onActivityResult()方法中可以这样做(ResultActivity和NewActivity为要打开的新Activity)。
代码如下:
FirstActivity.java
package com.example.pagejump;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class FirstActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
}
//创建页面跳转skip方法
public void skip(View view){
Intent intent = new Intent(this, SecondActivity.class);
intent.putExtra("msg", "来自第一个Activity!");
// startActivity(intent);
int requestCode = 0;
//调用该方法实现跳转
this.startActivityForResult(intent, requestCode);
}
//该方法用于接收第二个界面返回的参数
protected void onActivityResult(int requestCode, int resultCode,Intent data){
if(requestCode==0){
//接受第二个界面返回的参数,显示在界面上
TextView tv = (TextView)this.findViewById(R.id.textView1);
tv.setText("requestCode="+requestCode+
", 第二个Activity返回结果:"+data.getStringExtra("result"));
}
}
}
activity_first.xml
<LinearLayout 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"
tools:context="com.example.pagejump.FirstActivity"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/btnSkip"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="skip"
android:text="@string/btn_skip" />
</LinearLayout>
SecondActivity.java
package com.example.pagejump;
import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class SecondActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
//接收前面一个界面传递的对象
String msg = getIntent().getStringExtra("msg");
TextView tv = (TextView)this.findViewById(R.id.textView1);
tv.setText("第一个Activity传递来的值为:"+msg);
}
public void back(View view){
Intent intent = new Intent();
//把要返回的参数放在intent对象中
intent.putExtra("result", "来自第二个Activity的值!");
setResult(0,intent);
this.finish();
}
}
activity_second.xml
<LinearLayout 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="com.example.pagejump.SecondActivity"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<Button
android:id="@+id/btnBack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="back"
android:text="@string/btn_back" />
</LinearLayout>