两个Activity交互时的生命周期
页面跳转(从MainActivity到SecondActivity)
再按back键
Activity生命周期交互设计思想
为什么要先暂停当前显示的Acitivity?
比如听歌的时候来电话了
为什么要先执行打开的Activity的onCreate、onStart、onResume方法呢?
在打开新Activity的时候,为什么不先执行当前Activity的onPause、onStop方法呢?
crush:因为程序或者各种原因而导致的程序意外退出,俗称“闪退”
Activity的横竖屏切换
旋转手机屏幕
@Override
protected void onSaveInstanceState(Bundle outState) {
Log.i(TAG, "MainActivity onSaveInstanceState");
super.onSaveInstanceState(outState);
outState.putString("name", "Lin");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "MainActivity onCreate");
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
textView = (TextView) findViewById(R.id.textView);
button.setOnClickListener(this);
if (savedInstanceState != null) {
textView.setText(savedInstanceState.getString("name"));
}
}
生命周期应用场景
在res下新建raw文件夹 放入音乐文件
MainActivity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
public static final String TAG = "Main";
private Button button;
private TextView textView;
private MediaPlayer mediaPlayer;
private int position;
@Override
protected void onSaveInstanceState(Bundle outState) {
Log.i(TAG, "MainActivity onSaveInstanceState");
super.onSaveInstanceState(outState);
outState.putString("name", "Lin");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "MainActivity onCreate");
setContentView(R.layout.activity_main);
button = (Button) findViewById(R.id.button);
textView = (TextView) findViewById(R.id.textView);
button.setOnClickListener(this);
if (savedInstanceState != null) {
textView.setText(savedInstanceState.getString("name"));
}
mediaPlayer = MediaPlayer.create(this, R.raw.sing);
mediaPlayer.start();
}
@Override
protected void onStart() {
Log.i(TAG, "MainActivity onStart");
super.onStart();
}
@Override
protected void onResume() {
Log.i(TAG, "MainActivity onResume");
super.onResume();
if (position != 0) {
mediaPlayer.seekTo(position);
mediaPlayer.start();
}
}
@Override
protected void onPause() {
Log.i(TAG, "MainActivity onPause");
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
position = mediaPlayer.getCurrentPosition();
}
super.onPause();
}
@Override
protected void onStop() {
Log.i(TAG, "MainActivity onStop");
super.onStop();
}
@Override
protected void onDestroy() {
Log.i(TAG, "MainActivity onDestroy");
super.onDestroy();
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "MainActivity onRestart");
}
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
}
Activity的启动方式
直接启动
// Intent intent = new Intent(ThreeActivity.this, FourActivity.class);
Intent intent = new Intent();
ComponentName componentName = new ComponentName(ThreeActivity.this, FourActivity.class);
intent.setComponent(componentName);
startActivity(intent);
匿名启动
<activity android:name=".ThreeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".FourActivity">
<intent-filter>
<action android:name="www.lin.com" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
Category属性用于指定当前动作(Action)被执行的环境
Intent intent = new Intent();
// ComponentName componentName = new ComponentName(ThreeActivity.this, FourActivity.class);
// intent.setComponent(componentName);
intent.setAction("www.lin.com");
startActivity(intent);
启动系统常见的Activity
启动浏览器
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.parse("http://www.baidu.com");
intent.setData(uri);
startActivity(intent);
启动相册
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivity(intent);
图片点击事件什么的使用的startActivityForResult方法在此不详述
发送短信
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "I am mtf");
startActivity(intent);
启动电话界面
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri uri = Uri.parse("tel:123456");
intent.setData(uri);
startActivity(intent);
Develop > Reference > Intent
https://github.com/LiuchangDuan/androiddemo/tree/master/activitydemo