Activity生命周期、启动方式及常见Activity

两个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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值