5.Android四大组件之Activity

Activity状态

  • onCreate

Acticvity第一次启动的时候会被调用

  • onStart

Activity正在变为可见

  • onResume

Activity已可见,并获取焦点

  • onPause

一个Activity位于另一个Activity之上,但是不完全消失

  • onStop

Activity不可见

  • onDestory

退出了整个Activity

  • onRestart

Activity被停止后重新启动

Activity生命周期

在这里插入图片描述

  • 启动一个Activity会经历以下过程

oncreate---onstart---onresume

  • 按下home键-

onpause---onstop

  • 再回到activity界面

onrestart---onstart---onresume

  • 退出activity

ondestory

Activity通过显示Intent跳转

  • step1:

对SecondActivity进行创建,同时需要在layout文件下进行布局的设置

	public class SecondActivity extends AppCompatActivity {
	
	    private TextView text;
	    @Override
	    protected void onCreate(@Nullable Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	
	        setContentView(R.layout.activity_linear);
	
	        text = (TextView) findViewById(R.id.textview_id);
	
	        Log.i("SecondActivity","text = "+text.getText().toString());
	    }
	}
  • step2:

Androidmainfest.xml中对新增的activity进行声明

  <!--AndroidMainfest中增加该Activity的声明-->
    <activity android:name=".SecondActivity">
    </activity>
  • step3:

在MainActivity中对实现跳转

    Intent intent = new Intent(MainActivity.this , SecondActivity.class);
    startActivity(intent);

Activity通过隐式Intent跳转

  • step1:

在MainActivity定义intent对象

    Intent intent = new Intent();
    intent.setAction("com.example.myfirstapplication.ACTION_TEST");
    intent.addCategory("aaa");
    Uri uri = Uri.parse("baidu://www.baidu.com/nihaonihao");
    intent.setData(uri);
    startActivity(intent);
  • step2:

创建需要跳转的Activity

	public class ThirdActivity extends AppCompatActivity {
	    private static String TAG = "ThirdActivity";
	    private TextView text;
	
	    @Override
	    protected void onCreate(@Nullable Bundle savedInstanceState) {
	        super.onCreate(savedInstanceState);
	
	        setContentView(R.layout.activity_third);
	        text = (TextView) findViewById(R.id.textView_third);
	
	        Log.i(TAG,"text = "+text.getText().toString());
	    }
	}
  • step3:

在AndroidMainfest.xml文件中进行Activity的声明

    <activity android:name=".ThirdActivity">
        <intent-filter>
            <action android:name="com.example.myfirstapplication.ACTION_TEST"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="aaa"/>
            <data android:scheme="baidu" android:host="www.baidu.com" />
        </intent-filter>
    </activity>

Activity有返回结果的跳转

通常情况下,我们启动一个Activity是调用startActivity方案,此方法调用后是不会有结果返回的,那么如果需要另外一个Activity有结果可以返回怎么处理,需要调用startActivityForResult方法

1. startActivityForResult

	public void startActivityForResult (Intent intent, 
                int requestCode)
  • intent

表示需要启动的intent对象

  • requestCode

当Activity结束时requestCode将归还在onActivityResult()中。以便确定返回的数据是从哪个Activity中返回,用来标识目标activity,请求访问界面即主动方的int型标志

  • 异常

    android.content.ActivityNotFoundException

2.onActivityResult

onActivityResult接收回传数据

	protected void onActivityResult (int requestCode, 
	                int resultCode, 
	                Intent data)
  • requestCode

int: requestCode用于与startActivityForResult中的requestCode中值进行比较判断,是以便确认返回的数据是从哪个Activity返回的。

  • resultCode

int: resultCode是由子Activity通过其setResult()方法返回。适用于多个activity都返回数据时,来标识到底是哪一个activity返回的值

  • data

Intent: 可以通过data.getXxxExtra( );方法来获取指定数据类型的数据

	@Override
	protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
	    super.onActivityResult(requestCode, resultCode, data);
	
	    switch(requestCode){
	        case 1:
	            if(resultCode == RESULT_OK)
	            {
	                String returndata = data.getStringExtra("data_return");
	                Log.i(TAG,"returndata = "+returndata);
	            }
	            break;
	        default:
	    }
	}

3.setResult

返回结果给调用者

	public final void setResult (int resultCode, 
                Intent data)
  • resultCode

int:当Activity结束时resultCode将归还在onActivityResult()中,一般为RESULT_CANCELED , RESULT_OK该值默认为-1

  • Intent

回传给Activity

    Intent result_intent = new Intent();
    result_intent.putExtra("data_return","hello MainActivity");
    setResult(RESULT_OK,result_intent);
    finish();

4.finish

默认为-1

  • Intent

回传给Activity

    Intent result_intent = new Intent();
    result_intent.putExtra("data_return","hello MainActivity");
    setResult(RESULT_OK,result_intent);
    finish();

5.实例演练

MainActivity通过显示Intent跳转到SecondActivity,SecondActivity隐士跳转到ThirdActivity

在这里插入图片描述

在这个流程成中,生命周期的具体体现如下

在这里插入图片描述

具体的logcat信息如下

09-29 02:36:30.520 11253 11253 I MainActivity: onCreate
09-29 02:36:30.525 11253 11253 I MainActivity: onStart
09-29 02:36:30.525 11253 11253 I MainActivity: onResume
09-29 02:36:30.615  1886  2028 I ActivityManager: Displayed com.example.intenttest/.MainActivity: +186ms
09-29 02:36:30.615  1886  2028 I ActivityManager: Timeline: Activity_windows_visible id: com.example.intenttest time:251413211
09-29 02:36:37.871 11253 11253 I MainActivity: ID id error,login fail!
09-29 02:36:37.871 11253 11253 I MainActivity: id = rt
09-29 02:36:37.871 11253 11253 I MainActivity: pwd = 23
09-29 02:36:37.875  1886  2468 W ActivityManager: startActivityMayWait() packageName = com.example.intenttest, appSourcePath = /data/app/com.example.inten
ttest-1/base.apk
09-29 02:36:37.876  1886  2468 I ActivityManager: START u0 {cmp=com.example.intenttest/.SecondActivity (has extras)} from uid 10037 on display 0
09-29 02:36:37.911 11253 11253 I MainActivity: onPause
09-29 02:36:37.964 11253 11253 I SecondActivity: getdata = I am SecondActivity
09-29 02:36:37.965 11253 11253 I SecondActivity: onCreate
09-29 02:36:37.966 11253 11253 I SecondActivity: onStart
09-29 02:36:37.966 11253 11253 I SecondActivity: onResume
09-29 02:36:38.045  1886  2028 I ActivityManager: Displayed com.example.intenttest/.SecondActivity: +129ms
09-29 02:36:38.092  1886  2028 I ActivityManager: Timeline: Activity_windows_visible id: com.example.intenttest time:251420688
09-29 02:36:38.126 11253 11253 I MainActivity: onStop
09-29 02:39:35.010  1886  1922 W ActivityManager: startActivityMayWait() packageName = com.example.intenttest, appSourcePath = /data/app/com.example.inten
ttest-1/base.apk
09-29 02:39:35.012  1886  1922 I ActivityManager: START u0 {act=com.example.IntentTest.ACTION_TEST cat=[aaa] dat=baidu://www.baidu.com/nihaonihao cmp=com.
example.intenttest/.ThirdActivity} from uid 10037 on display 0
09-29 02:39:35.052 11253 11253 I SecondActivity: onPause
09-29 02:39:35.095 11253 11253 I ThirdActivity: text = 发送成功
09-29 02:39:35.095 11253 11253 I ThirdActivity: onCreate
09-29 02:39:35.098 11253 11253 I ThirdActivity: onStart
09-29 02:39:35.098 11253 11253 I ThirdActivity: onResume
09-29 02:39:35.166  1886  2028 I ActivityManager: Displayed com.example.intenttest/.ThirdActivity: +110ms
09-29 02:39:35.206  1886  2028 I ActivityManager: Timeline: Activity_windows_visible id: com.example.intenttest time:251597802
09-29 02:39:35.215 11253 11253 I SecondActivity: onStop
09-29 02:40:39.563 11253 11253 I ThirdActivity: onPause
09-29 02:40:39.586 11253 11253 I SecondActivity: onRestart
09-29 02:40:39.595 11253 11253 I SecondActivity: onStart
09-29 02:40:39.595 11253 11253 I SecondActivity: onResume
09-29 02:40:39.690  1886  2028 I ActivityManager: Timeline: Activity_windows_visible id: com.example.intenttest time:251662285
09-29 02:40:39.692 11253 11253 I ThirdActivity: onStop
09-29 02:40:39.693 11253 11253 I ThirdActivity: onDestroy
09-29 02:44:11.307 11253 11253 I SecondActivity: onPause
09-29 02:44:11.339 11253 11253 I MainActivity: returndata = I am MainActivity
09-29 02:44:11.339 11253 11253 I MainActivity: onRestart
09-29 02:44:11.344 11253 11253 I MainActivity: onStart
09-29 02:44:11.344 11253 11253 I MainActivity: onResume
09-29 02:44:11.461  1886  2028 I ActivityManager: Timeline: Activity_windows_visible id: com.example.intenttest time:251874057
09-29 02:44:11.464 11253 11253 I SecondActivity: onStop
09-29 02:44:11.464 11253 11253 I SecondActivity: onDestroy
09-29 02:44:57.865 11253 11253 I MainActivity: onPause
09-29 02:44:57.919 11253 11253 I MainActivity: onStop
09-29 02:44:57.919 11253 11253 I MainActivity: onDestroy


6.项目代码

IntentTest

发布了100 篇原创文章 · 获赞 42 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Hh20161314/article/details/100566469