当前位置:   article > 正文

Activity总结_android activity跳转都要在配置清单声明吗

android activity跳转都要在配置清单声明吗

创建activity

  • 第一种设置方式(常用):需要在清单文件中为继承activity的类 配置一个activity标签:如下

第一种方式:隐士跳转(要设置意图过滤器)

结合源码
10-15 01:11:20.097: E/AndroidRuntime(3840): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=hahaha }
会报以上错误的原因是:
因为如果为任何一个个activity设置意图过滤器,默认都必须有一个categary,仅仅设置action,则会报上面的错误。

1、通过设置一组意图过滤器来开启界面,只要满足任何一组都行
前提条件是 你必须将意图过滤器当中的所有节点在Intent中设置好

     <intent-filter>
                    <action android:name="hahaha" />

                    <data android:scheme="hehe" />
                 <!--    不是一个桌面图标,所以一般都用默认的 -->
                    <category android:name="android.intent.category.DEFAULT"/>
     </intent-filter>

     <intent-filter>
    <!-action节点的name属性可以随便更改名称->
                    <action android:name="zz.itcast.second" />
                        <!-设置数据类型,其中scheme是命名空间,即数据开头必须带有的字段,如果配置了data节点则必须在程序中设置相应的字段,如果不设置将会报错,一般都会设置在意图过滤器中设置data节点,不规范的下发也可以不带有该节点不会报错->
                    <data android:scheme="text" />
                 <!--    一般若是不设置成桌面图标,所以都用默认的android.intent.category.DEFAULT -->
                    <category android:name="android.intent.category.DEFAULT"/>
      </intent-filter>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

两种开启意图过滤器都可以,满足任何一个都行

//第一种意图过滤器
intent2.setAction("hahaha");
以下这行代码可写可不写,因为category是默认的
intent2.addCategory(Intent.CATEGORY_DEFAULT);
intent2.setData(Uri.parse("hehe:"+"aldfjads"));

//第二种意图过滤器
intent2.setAction("zz.itcast.second");
intent2.setData(Uri.parse("text:"+"你好第二个界面"));
一个activity 可以设置一个或多个意图过滤器,只要符合一个activity中的任何一个意图过滤器即可以开启该activity。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

第二种方式:显示跳转(不用设置意图过滤器)

  • 显示意图设置不用为每一个activity(其实也可以设置只是没有什么用处)在工程清单中设置意图过滤器。
    / /第一种写法,通过指定包名(应用的包名)和全类名(加上命名空间的类名)
    //Intent intent2 = new Intent();
    //getPackageName()属于Context的
    // intent2.setClassName(getPackageName(), “zz.itcast.activity.SecondActivity”);

        //第二种写法
    
    
        Intent intent2 = new Intent(this, SecondActivity.class);
        startActivity(intent2);
    
    • 1
    • 2
    • 3
    • 4
    • 5

通过指定你要开启的Activity的类名或者字节码文件

显示意图和隐士意图的区别:

  • 显示意图:主要应用于本应用中切换界面,所切换的目标界面不用设置过滤意图,即直接设置name即可。
  • 隐式意图:一般用来开启第三方的界面,如果一个应用希望被别的应用开启,就在自己的清单文件当中定义IntentFillter这样的节点,如果不希望被开启,就不定义意图过滤器

  • 显示意图:开启本应用所在的的界面,用显示意图

  • 隐士意图:用来开启第三方的应用界面。

隐式意图传递数据(重要)

  • 隐式意图传递数据,通过指定scechme来传递数据,即通过设置 setData()方式,所以在目标界面首先得到Uri的对象uri来得到对象。
  • 例如:
    1、数据从当前界面发送的目标activity
    intent2.setAction(“zz.itcast.second”);
    intent2.setData(Uri.parse(“text:”+”你好第二个界面”));

        startActivity(intent2);
    
    • 1

    2、在目标界面接受数据
    Intent intent = getIntent();
    Uri uri = intent.getData();

    //获取到定义了命名空间 协议
    String scheme =  uri.getScheme();
    //拿到协议之后定义的数据,并显示
    String data =  uri.getSchemeSpecificPart();
    
    tv.setText("scheme = "+scheme+",data = "+data);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

显示意图传递数据

1、数据从当前界面发送的目标activity

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

        intent2.putExtra("dameinv", "你好,大美女");

        startActivity(intent2);
2、在目标界面接受数据
    String text =  getIntent().getStringExtra("dameinv");
    //在新的界面当中拿到开起界面带来的数据
    tv.setText(text);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2、显示意图都可以传递哪些数据类型,

1、八大基本数据类型都可以传递
2、继承自serializiable的类型   
3、继承自parcelable类型。


//区别:  serializiable的类型可以序列化到硬盘上,parcelable可以存到内存上
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

信息回传

A(当前界面)–B(目标界面)在关闭时,将数据回传给A—-A

如果你想在A界面开启B界面,并且在B界面关闭的时候,回传数据给A界面

1.A界面在开启B界面的时候需要调用startActivityForRestult(intent,int requestCode)

2.在B界面关闭的时候,需要调用两个关键方法

a.先设置要回传的数据 setResult(int resultCode,Intent data);

b.将自己关闭 finish();
  • 1
  • 2
  • 3

3.回调到A界面的onActivityResult(int requestCode,int resultCode,Intent data)
data就是B界面回传的数据

requestCode和resultCode 是用来分类的,用哪个都可以

3.Activity的生命周期

就像一个人

  1. 出生 onCreate()
  2. 上小学 onSchool()
  3. 上大学 onUnivercity()
  4. 上传智播客 onChuanzhi()
  5. 找工作 onWork()
  6. 找媳妇 onWife()
    。。。
  7. 挂掉 onOver();

开启第二个界面

onCreate():activity创建的时候会回调到此

onStart():界面可见的时候回调

onResume():界面获取到焦点的时候回调

onPause():界面失去焦点的时候回调

onStop() :界面不可见的时候回调

onDestroy():Activity消亡的时候回调

界面开启:
onCreate():activity创建的时候会回调到此

onStart():界面可见的时候回调

onResume():界面获取到焦点的时候回调

界面关闭:
onPause():界面失去焦点的时候回调

onStop() :界面不可见的时候回调

onDestroy():Activity消亡的时候回调

界面后台化:
onPause():界面失去焦点的时候回调

onStop() :界面不可见的时候回调

A界面开启B界面

A onPause();

B onCreate();

B onStart()

B onResume();

A onStop();

B返回A:

B onPause();

A onStart();

A onResume();

B onStop();

B onDestroy();

结合透明界面

A—开启B(B是透明界面)

A onPause();

B onCreate();

B onStart()

B onResume();

B(透明界面,返回A)

B onPause();

A onResume();

B onStop();

B onDestroy();

横竖屏切换的生命周期

横竖屏切换后,

onPause():界面失去焦点的时候回调

onStop() :界面不可见的时候回调

onDestroy():Activity消亡的时候回调

onCreate():activity创建的时候会回调到此

onStart():界面可见的时候回调

onResume():界面获取到焦点的时候回调

可以把方向写死 portrait 半身肖像 写死为竖直方向 90%的应用都是写死的 不走生命周期
android:screenOrientation=”portrait”

写死为横屏 landscape 风景画,打游戏或者看视频 不走生命周期
android:screenOrientation=”landscape”

如果不想走生命周期方法,还想有切换效果
android:configChanges=”orientation|screenSize|keyboardHidden”

如果还想接受到屏幕旋转的回调
就复写此方法onConfigurationChanged()

任务栈的介绍(面试当中喜欢问)

队列:先进先出 两头开口 从A口进,从B口出

栈:先进后出 只有一头开口

任务栈: 也叫回退栈 安卓当中把所有的activity都放入到了任务栈当中


开启一个activity代表进栈

关闭一个activity代表出栈

当栈中的Activity都清空的时候,代表应用退出了
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

一般来说,一个应用都维护了一个任务栈,当前应用的任务栈就放了自己的activity

每个应用都有一个自己任务栈的taskId

这个ID是自增长的,不管是什么应用,不管应用是否重复,只要需要重新申请任务栈,id都会增长

只要手机重启,ID从新开始计算。

Activity的四种启动模式(和任务栈相关联)

activity的四种启动模式:

standard:标准启动模式,也是默认的启动模式,正常的出栈进栈

SingleTop:如果当前开启的界面已经在最上面,那么就复用这个对象,就不再创建新的activity了

使用实例:browser中的书签页面,节省内存的做法

SingleTask:如果当前任务栈中已有这个activity,那么就将他上面的所有activity干掉
也是浏览器 BrowserActivity 也是节省内存

SingleInstance 那么就新开启一个任务栈,单独存放这个activity(02),并且这个任务栈中有且仅有这一个对象

当点击返回键时,必须是当前栈中所有的activity都消亡后,才切换任务栈

公用界面,来点界面,一般都会使用这种开启模式,有道词典,金山词典,公共界面会单独放置在一个任务栈

AsyncHttpClient

43
AsyncHttpClient client = new AsyncHttpClient();

client.get(url,回调接口)

client.post(url,RequestParameters,回调接口)

getApplicationcontext()和MainActivity的区别

用对话框的时候,一定要用Activity,因为对话框是依附在Activity上的

Dialog dialog = new Dialog(MainActivity.this);
如果传递getApplicationcontext()会报错 对话框必须依附在一个Activity上

其他时候:
吐司的话用什么都可以

建议用控件的时候 TextView tv = new TextView(MainActivity.this)

区别在于生命周期长度不一样
应用开启时,先开启的Application,其次才有了各个activity

肯定Activity至少要在Application的前面,或者同时消亡

Application的生命周期更长一点

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/178079
推荐阅读
相关标签
  

闽ICP备14008679号