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