Activity的创建与Intent的使用

Activity的创建与生命周期

  1. Activity的创建:
    包名处点击右键选择【new】->【Activity】->【Empty Activity】选项,填写Activity信息,完成创建。
    创建
    MainActivity里改成(R.layout.Empty Activity的名字)

  2. 生命周期状态:
    启动状态:当Activity启动之后便会进入下一个状态
    运行状态:Activity处于屏幕最前端,可与用户进行交互。
    暂停状态:Activity任然可见,但无法获取焦点,用户对它操作没有相应
    停止状态:Activity完全不可见,系统内存不足时会销毁该Activity

  3. 生命周期方法:
    生命周期方法

onCreate():在Activity创建时调用,通常做一些初始化设置。

onStart():在Activity即将可见时调用。

onResume():在Activity获取焦点开始与用户交互时调用。

onPause():在当前Activity被其他Activity覆盖或锁屏时调用。

onStop():在Activity对用户不可见时调用。

onDestroy():在Activity销毁时调用。

onRestart():在Activity从停止状态再次启动时调用

  1. Activity的四种启动模式:

(1)standard模式:Standard模式是Android的默认启动模式,你不在配置文件中做任何设置,那么这个Activity就是standard模式,这种模式下,Activity可以有多个实例,每次启动Activity,无论任务栈中是否已经有这个Activity的实例,系统都会创建一个新的Activity实例

(2)singleTop模式:SingleTop模式和standard模式非常相似,主要区别就是当一个singleTop模式的Activity已经位于任务栈的栈顶,再去启动它时,不会再创建新的实例,如果不位于栈顶,就会创建新的实例。

(3)singleTask模式:SingleTask模式的Activity在同一个Task内只有一个实例,如果Activity已经位于栈顶,系统不会创建新的Activity实例,和singleTop模式一样。但Activity已经存在但不位于栈顶时,系统就会把该Activity移到栈顶,并把它上面的activity出栈。

(4)singleInstance模式:singleInstance模式也是单例的,但和singleTask不同,singleTask只是任务栈内单例,系统里是可以有多个singleTask Activity实例的,而singleInstance Activity在整个系统里只有一个实例,启动一singleInstanceActivity时,系统会创建一个新的任务栈,并且这个任务栈只有他一个Activity。

Intent的使用与数据传递

返回数据

  1. Intent(意图)的使用

一般用于启动Activity、Service以及发送广播等。根据开启目标组件的方式不同,Intent被分为显示意图和隐式意图

显示意图查找Activity

//显示意图1
Intent intent = new Intent(this, Main2Activity.class);//通过指定一个具体的类名
startActivity(intent);//接收一个意图
//显示意图2
Intent intent =new Intent();
intent.setClass(MainActivity.this,Main2Activite.class);

隐式意图查找Activity
先通过app-manifests-AndroidManifest编写Main2Activity的时间

<activity android:name=".Main2Activity">
            <intent-filter>
          //action完成这个事件
                <action android:name="com.ithema.main2" />
//完成这个事件所需要的前提条件
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

在在ActivityMain中编写相应的代码

Intent intent = new Intent();
        intent.setAction("com.ithema.main2");
        intent.addCategory("android.intent.category.DEFAULT");
        startActivity(intent);

实战演练打开浏览器

先创建好背景图片还有一个button,在MainActivity里运用隐式意图编写代码

 //1.找到按钮并设置点击事件
        Button button=(Button) findViewById(R.id.main_button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //通过隐式意图开启系统浏览器
                Intent intent = new Intent();
                //设置开启浏览器的动作
                intent.setAction("android.intent.action.VIEW");
                //设置要打开的网页
                intent.setData(Uri.parse("http://www.baidu.com"));
                //开启页面
                startActivity(intent);

            }

运行结果如下:
隐式意图

数据传递

数据传递
A页面跳转到B页面

//A页面代码
 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(StateActivity.this,ShopActivity.class);
                Bundle bundle=new Bundle();
                bundle.putString("name","qiab");
                bundle.putString("num","88");
                intent.putExtras(bundle);
                startActivity(intent);

            }
 //B页面代码      
        textView=findViewById(R.id.textView);
        Bundle bundle=getIntent().getExtras();
        String name=bundle.getString("name");
        String  num=bundle.getString("num");
        textView.setText(name+","+num);     
 //A页面
        buttonLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,StateActivity.class);
                //传递数据,用户名和密码
                intent.putExtra("userName",editTextName.getText().toString());
                intent.putExtra("userPwd",editTextPwd.getText().toString());
                startActivity(intent);
            }
        });
 //B页面接收数据放在两个textView上
  Intent intent=getIntent();//通过意图接收数据
  //获取意图中字符串的值
  textViewName.setText(intent.getStringExtra("userName"));
  textViewPwd.setText(intent.getStringExtra("userPwd"));

数据回传

创建一个Weapon类,用来传递数据。

Weapon实现一个接口
public class Weapon implements Serializable 
//每个Button页面的监听事件添加相应的数据
 returnWeapon(sword);
 returnWeapon(shield);
 returnWeapon(weapon);

//C页面,方法return处理设置武器结果
 private void returnWeapon(Weapon weapon)
    {
        Intent intent=new Intent();
        intent.putExtra("weapon",weapon);
        setResult(RESULT_OK,intent);
        finish();
    }    
//第二个页面需要接受数据
//Generate-Override—OnActivityResult
 @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Weapon weapon=(Weapon) data.getSerializableExtra("weapon");
        progressBar1.setProgress(progressBar1.getProgress()+weapon.getAttack());
        progressBar2.setProgress(progressBar2.getProgress()+weapon.getDefence());
        progressBar3.setProgress(progressBar3.getProgress()+weapon.getSpeed());
    } 
  //显示在小宠物的进度条上
   
 
发布了24 篇原创文章 · 获赞 5 · 访问量 536

猜你喜欢

转载自blog.csdn.net/weixin_46178009/article/details/104798185