Android-Activity生命周期-4种启动模式-数据传递-显式隐式跳转

Android-Activity笔记

一、Activity定义

       Activity是一个应用程序组件,提供用户和程序交互的界面。安卓四大组件之一。

 

二、Activity创建与使用

     1、继承Android的Activity类

     2、重新方法

    3、设置显示布局

<span style="font-size:18px;">public class MyActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_layout);
	}
}</span>


    4、在AndroidManifest文件中注册Activity

 

<application>
 	<activity android:name="com.sqb.demo.MyActivity" />
</application>

三、AndroidManifest文件中配置主入口Activity

<activity 
       android:name=".MainActivity"
       android:label="@string/app_name" >
	<intent-filter>
		<action android:name=”android.intent.action.MAIN” />
		<category android:name=”android.intent.category.LAUNCHER” />
	</intent-filter>
</activity>


 

四、Activity生命周期

       onCreate(); 创建

       onStart();      运行

       onResume(); 获取焦点

       onPause();    失去焦点

       onStop();       停止

       onDestrop(); 销毁

       onRestart();  重新开始


五、Activity的四种状态

       1、活动状态(Active / Running )Activity处于界面最顶端,获取焦点。

       2、暂停状态(Paused)Activity失去焦点,但对用户可见。

       3、停止状态(Stopped)Activity被完全遮挡,但保留所有状态和成员信息。

       4、非活动状态(Killed)Activity被停止。

 

六、Activity的启动模式

     1、活动任务栈(Activity task stack)简介:

         用来保存创建Activity实例的栈(栈:连续的内存空间,后进先出)

    2、配置Activity启动模式

<span style="font-size:18px;"><activity
      android:launchMode=”standard”
      android:name=”com.sqb.MyActivity” >
</activity></span>


    3、四种模式

       (1standard模式:默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。

      (2singleTop模式:该Activity在同一个栈中可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。

     (3singleTask模式:该Activity在同一个栈中只有一个。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个ActivitysingleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。

      (4singleInstance模式:一个任务栈只有一种Activity实例。若要创建同一个Activity则放到同一个任务栈中,创建其他的Activity则放到另一个任务栈中。



七、Activity的跳转

     1、应用场景:

        (1)显式启动的效率高于隐式,显式直接跳转,隐式需要遍历action

        (2)启动同一应用中的Activity建议用显式

        (3)启动不同应用中的Activity建议用隐式

        (4)如果系统找到了多个intent-filter与程序员创建的intent匹配,那么就会弹出对话框,列举所有匹配的Activity,让用户选择

        (5)隐式跳转兼容性更好,只要匹配action就行了。

  2、显式跳转:要求必须要知道被激活的组件的包名和class的名字

        第一种写法:

            <1>同一应用中,指定目标Activity的字节码和当前的上下文

            Intent intent = new Intent();

           intent.setClassName(this, Activity.class);

          startActivity(intent);

           <2>不同应用中,指定目标Activity所在的应用的包名和Activity的全路径名

           Intent intent = new Intent();

          intent.setClassName(classPageName,classAllPathName);

          startActivity(intent);

 

      第二种写法:

            <1>同一应用中,指定目标Activity的字节码和当前的上下文

              Intent intent = new Intent(this, Activity.class);

             startActivity(intent);

           <2>不同应用中,指定目标Activity所在的应用的包名和Activity的全路径名

             Intent intent = new Intent(classPageName,classAllPathName);

             startActivity(intent);

 

       第三种写法:(不常用)

            Intent intent = new Intent();

            ComponentName comonent = new ComponentName(classPageName,className);

            intent.setComponent(component);

            startActivity(intent);

 

      3、隐式跳转:当隐式启动时系统会在所有清单文件中寻找与程序员创建的intent匹配的intent-filter,找到则启动,找不到则抛异常。

           (1)需要在清单文件的activity标签下,配置intent-filter子节点,其中再配置actioncategory

<span style="font-size:18px;"><activity android:name="com.sqb.demo.MyAnotherActivity" >
<!--可以设置多个action,仅需要匹配一个即可跳转-->
<action android:name="com.sqb.a">
<!--可以设置多个scheme,需要匹配一个,若设置mimeType也要匹配-->
<data 	android:scheme="abc" //数据必须以abc开头
 			android:host="com.sqb.abc" //数据主机必须是com.sqb.abc
 			android:mimeType="text/*">
</data>
<!--category 必须要有,默认是android.intent.category.DEFAULT-->
<category android:name="android.intent.category.DEFAULT">
</activity></span>


          (2)启动时的代码:

                  Intent intent = new Intent();

                  intent.setAction(“com.sqb.abc”);

                  //如果清单文件中有配置data,则要设置setData,否则不匹配

                  intent.setData(Uri.parse(“abc:myMSG”));

                  //如果清单文件中有配置mimeType,则要设置setType,否则不匹配

                   intent.setType(“text/msg”);

                  //或者用:intent.setDataAndType(Uri.parse(“abc:myMSG”),”text/msg”);

                  startActivity(intent);

 

八、Activity之间传递数据

        1、无数据返回跳转startActivity

            (1显式跳转传递数据:

                    <1>activity设置数据:

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

                      //第一种情况,把数据封装到intent

                      intent.putExtra(“msg1”,”name”);

                      intent.putExtra(“msg2”,”sex”);

 

                      //第二种情况,把数据封装到Bundle中,再封装到intent

                     Bundle bundle = new Bundle();

                     bundle.putString(“key1”,”lalala”);

                     intent.putExtras(bundle);

 

                    //第三种情况,传递对象

                    //第一步,该对象需要实现序列号接口Serializable

                   public class Person implements Serializable

                   //第二步,传递对象的原始页面调用intent.putExtra()即可

                   Person obj = new Person();                                

                   intent.putExtra("Person", obj);

 

              <2>目标activity接收数据:

               //获取启动该Activity的意图对象

               Intent intent = getIntent();

 

               //第一种情况

                String data = intent.getStringExtra("msg1");

 

              //第二种情况

               Bundle bundle = intent.getExtras();

               String data1 = bundle.getString("key1");

 

              //第三种情况

              intent .getSerializableExtra("Person");

 

        (2)隐式跳转传递数据:

          <1>activity设置数据:

//如果清单文件中有配置data,则要设置setData,否则不匹配

intent.setData(Uri.parse(abc:myMSG));

           <2>目标activity接收数据:

         //获取启动该Activity的意图对象

         Intent intent = getIntent();

         Uri uri = intent.getData();

 

       2、有数据返回跳转startActivityForResult

            A页面:startActivityForResult(Intent intent, int requestCode)

                           重写onActivityResult(int requestCode, int resultCode, Intent data)

           B页面:setResult(int resultCode, Intent data);

                           finish();




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于Android编程的问题,我来尽可能详细地回答一下。 首先,我们需要明确一下,什么是隐式启动Activity隐式启动Activity是指当我们不知道或不关心应用程序的包名和类名时,可以通过指定Intent的Action、Category、Data等信息来启动相应的Activity。 下面是实现internet以隐式方式启动Activity并完成数据传递和结果返回的步骤: 1. 在AndroidManifest.xml文件中配置Activity,设置Action、Category、Data等信息。例如: ``` <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> </intent-filter> </activity> ``` 这个配置表示,当系统接收到一个http协议的Intent时,会打开MainActivity这个Activity。 2. 在MainActivity中,获取Intent中的数据。例如: ``` Uri data = getIntent().getData(); ``` 这个代码可以获取到Intent中的Uri数据,也就是访问的网址。 3. 在MainActivity中,将数据传递给另一个Activity。例如: ``` Intent intent = new Intent(); intent.setClass(MainActivity.this, SecondActivity.class); intent.putExtra("data", data.toString()); startActivityForResult(intent, 1); ``` 这个代码会启动另一个Activity,并将data数据传递给它。其中,putExtra()方法用于传递数据,第一个参数是键名,第二个参数是值。 4. 在SecondActivity中,获取传递过来的数据。例如: ``` String data = getIntent().getStringExtra("data"); ``` 这个代码可以获取到MainActivity传递过来的data数据。 5. 在SecondActivity中,将结果返回给MainActivity。例如: ``` Intent intent = new Intent(); intent.putExtra("result", "success"); setResult(RESULT_OK, intent); finish(); ``` 这个代码会将一个结果值返回给MainActivity,并关闭SecondActivity。其中,setResult()方法用于设置结果值,第一个参数是结果码,一般用RESULT_OK表示成功;第二个参数是Intent对象,用于传递结果数据。 6. 在MainActivity中,获取返回的结果。例如: ``` @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == 1 && resultCode == RESULT_OK) { String result = data.getStringExtra("result"); if (result.equals("success")) { // 处理成功的情况 } else { // 处理失败的情况 } } } ``` 这个代码会在SecondActivity返回结果后被调用,可以在其中获取到返回的结果值。 以上就是实现internet以隐式方式启动Activity并完成数据传递和结果返回的步骤。需要注意的是,如果要启动一个网页,需要添加INTERNET权限。例如: ``` <uses-permission android:name="android.permission.INTERNET" /> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值