android Activity启动模式-程序员宅基地

Activity的启动模式有两种:一种是在AndroidManifest.xml文件中,配置launchMode属性,还有一种是设置intent的flag的方式来启动

1、设置android:launchMode属性

    可以分为四种:standard、singleTop、singleTask、singleInstance

    standard:默认值。系统不考虑此Activity的实例是否已经在Back Stack中存在。每次创建都会启动一个新的Activity

    singleTop:启动时,栈顶刚好就是目标Activity,则调用此Activity的onNewIntent()即可。如果不是,则创建新的Activity实例

    singleTask:整个应用程序的上下文只有一个实例。当启动此类Activity的时候,系统会从Back Stack中检查是否已经存在此Activity的实例。            如果存在,会直接使用,并将此实例之上的Activity出栈,依然会毁掉onNewIntent().如果没有就会创建一个新的实例。

    singleInstance:此Activity独享一个Back Stack。主要用于程序之间的数据共享。

    下面以例子来解释:

    具体的代码的设定模式如下:

        <activity
            android:name=".launchmodeTest.StandardAActivity"
            android:label="A">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".launchmodeTest.SingleTopActivity" android:launchMode="singleTop" android:label="栈顶复用"/>
        <activity android:name=".launchmodeTest.SingleTaskActivity" android:launchMode="singleTask" android:label="栈内复用"/>
        <activity android:name=".launchmodeTest.SingleInstanceActivity" android:launchMode="singleInstance" android:label="单独的一个栈"/>
        <activity android:name=".launchmodeTest.StandardCActivity" android:label="C"></activity>

   1.1 singleTop 栈顶复用:

            1.1.1 启动步骤为:StandardAActivity-->SingleTopActivity-->StandardCActivity-->SingleTopActivity

                执行adb shell dumpsys activity命令,在堆栈中的代码为(截取了其中一部分):

  Running activities (most recent first):
    TaskRecord{528b8768 #5 A base.example.com U 0}
      Run #4: ActivityRecord{528ddc64 u0 base.example.com/.launchmodeTest.SingleTopActivity}
      Run #3: ActivityRecord{52897c50 u0 base.example.com/.launchmodeTest.StandardCActivity}
      Run #2: ActivityRecord{5288e658 u0 base.example.com/.launchmodeTest.SingleTopActivity}
      Run #1: ActivityRecord{527919fc u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

         分析说明:

                a、其中有两个堆栈:

                    前台堆栈:TaskRecord{528d7cd8 #6 A base.example.com U 0}

                    后台堆栈:TaskRecord{528c8b7c #2 A com.android.launcher U 0}

                b、桌面:Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

        1.1.2 启动步骤为:StandardAActivity-->SingleTopActivity-->SingleTopActivity

                执行adb shell dumpsys activity命令,在堆栈中的代码为(截取了其中一部分):

  Running activities (most recent first):
    TaskRecord{528d7cd8 #6 A base.example.com U 0}
      Run #2: ActivityRecord{527919fc u0 base.example.com/.launchmodeTest.SingleTopActivity}
      Run #1: ActivityRecord{528b78c0 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

                可以看到,SingleTopActivity两次启动,但是只有一个实例。

                其中,生命周期为

11-28 03:22:01.499 1831-1831/base.example.com I/SingleTopActivity: onPause: 
11-28 03:22:01.499 1831-1831/base.example.com I/SingleTopActivity: onNewIntent: 
11-28 03:22:01.499 1831-1831/base.example.com I/SingleTopActivity: onResume: 

            1.2  singleTask 栈内复用

                   启动步骤为:StandardAActivity-->SingleTaskActivity-->StandardCActivity   

                   堆栈为:

    Running activities (most recent first):
    TaskRecord{528764c0 #8 A base.example.com U 0}
      Run #3: ActivityRecord{5289a4a0 u0 base.example.com/.launchmodeTest.StandardCActivity}
      Run #2: ActivityRecord{52889940 u0 base.example.com/.launchmodeTest.SingleTaskActivity}
      Run #1: ActivityRecord{527919fc u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

                   再启动SingleTaskActivity

                   堆栈为: 

  Running activities (most recent first):
    TaskRecord{528764c0 #8 A base.example.com U 0}
      Run #2: ActivityRecord{52889940 u0 base.example.com/.launchmodeTest.SingleTaskActivity}
      Run #1: ActivityRecord{527919fc u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

            可见,其中StandardCActivity被从堆栈中移除,其生命周期为:

11-28 04:13:09.295 2163-2163/base.example.com I/StandardCActivity: onPause: 
11-28 04:13:09.311 2163-2163/base.example.com I/SingleTaskActivity: onNewIntent: 
11-28 04:13:09.311 2163-2163/base.example.com I/SingleTaskActivity: onStart: 
11-28 04:13:09.311 2163-2163/base.example.com I/SingleTaskActivity: onResume: 
11-28 04:13:09.343 2163-2163/base.example.com W/EGL_genymotion: eglSurfaceAttrib not implemented
11-28 04:13:09.719 2163-2163/base.example.com I/StandardCActivity: onStop: 
11-28 04:13:09.719 2163-2163/base.example.com I/StandardCActivity: onDestroy: 

        可见,直接将SingleTaskActivity上面的StandardCActivity移除,并调用了自己的onNewIntent()方法StandardCActivity自己走了自己的destroy流程。(栈内复用)

            1.2.1 使用taskAffinity属性

                    taskAffinity属性可以翻译为任务相关性,主要表示的是此Activity的进程名字(默认进程是包名)。其中的值必须为字符串,并且包含“.”

                    例如如下定义:

<activity android:name=".launchmodeTest.SingleTaskWithAffinityActivity"
            android:launchMode="singleTask" android:taskAffinity="com.cxy.test"></activity>

                    启动后的栈为:StandardAActivity-->SingleTaskWithAffinityActivity

  Running activities (most recent first):
    TaskRecord{528e7e2c #12 A com.cxy.test U 0}
      Run #2: ActivityRecord{527919fc u0 base.example.com/.launchmodeTest.SingleTaskWithAffinityActivity}
    TaskRecord{528c7a48 #11 A base.example.com U 0}
      Run #1: ActivityRecord{5276bcd4 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

                    再启动一个standard模式的Activity:StandardAActivity-->SingleTaskWithAffinityActivity-->StandardCActivity

  Running activities (most recent first):
    TaskRecord{528e7e2c #12 A com.cxy.test U 0}
      Run #3: ActivityRecord{52889940 u0 base.example.com/.launchmodeTest.StandardCActivity}
      Run #2: ActivityRecord{527919fc u0 base.example.com/.launchmodeTest.SingleTaskWithAffinityActivity}
    TaskRecord{528c7a48 #11 A base.example.com U 0}
      Run #1: ActivityRecord{5276bcd4 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

                               可以查看出来,谁启动的Activity,就会在谁的栈中添加对应的Activity。除非被启动的Activity已经制定了进程名。

                    再次启动SingleTaskWithAffinityActivity:StandardAActivity-->SingleTaskWithAffinityActivity-->SingleTaskWithAffinityActivity

  Running activities (most recent first):
    TaskRecord{528e7e2c #12 A com.cxy.test U 0}
      Run #2: ActivityRecord{527919fc u0 base.example.com/.launchmodeTest.SingleTaskWithAffinityActivity}
    TaskRecord{528c7a48 #11 A base.example.com U 0}
      Run #1: ActivityRecord{5276bcd4 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

                    生命周期:

11-28 04:37:02.595 2411-2411/base.example.com I/StandardCActivity: onPause: 
11-28 04:37:02.607 2411-2411/base.example.com I/SingleTaskWithAffinityA: onNewIntent: 
11-28 04:37:02.607 2411-2411/base.example.com I/SingleTaskWithAffinityA: onStart: 
11-28 04:37:02.611 2411-2411/base.example.com I/SingleTaskWithAffinityA: onResume: 
11-28 04:37:02.647 2411-2411/base.example.com W/EGL_genymotion: eglSurfaceAttrib not implemented
11-28 04:37:03.019 2411-2411/base.example.com I/StandardCActivity: onStop: 
11-28 04:37:03.019 2411-2411/base.example.com I/StandardCActivity: onDestroy: 

                                可见调用了SingleTaskWithAffinityActivity的onNewIntent()、onStart()、onResume()方法。并将StandardCActivity从堆栈中移除了。

                    再次启动SingleTaskActivity:StandardAActivity-->SingleTaskWithAffinityActivity-->StandardCActivity-->SingleTaskActivity

  Running activities (most recent first):
    TaskRecord{528321b0 #13 A base.example.com U 0}
      Run #4: ActivityRecord{5292dca8 u0 base.example.com/.launchmodeTest.SingleTaskActivity}
    TaskRecord{5288a210 #14 A com.cxy.test U 0}
      Run #3: ActivityRecord{528ddc64 u0 base.example.com/.launchmodeTest.StandardCActivity}
      Run #2: ActivityRecord{5288e658 u0 base.example.com/.launchmodeTest.SingleTaskWithAffinityActivity}
    TaskRecord{528321b0 #13 A base.example.com U 0}
      Run #1: ActivityRecord{52889940 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

                                可见设置了singleTask模式的activity,会在原来的堆栈中。

                    假设给standard模式的activity设置taskAffinity属性

        <activity
            android:name=".launchmodeTest.StandardCActivity"
            android:label="C"
            android:taskAffinity="com.cxy.test.one"/>

                            启动的结果为:StandardAActivity-->SingleTaskWithAffinityActivity-->StandardCActivity

  Running activities (most recent first):
    TaskRecord{5276b448 #16 A com.cxy.test U 0}
      Run #3: ActivityRecord{5288e658 u0 base.example.com/.launchmodeTest.StandardCActivity}
      Run #2: ActivityRecord{528ddc64 u0 base.example.com/.launchmodeTest.SingleTaskWithAffinityActivity}
    TaskRecord{528d42c4 #15 A base.example.com U 0}
      Run #1: ActivityRecord{527919fc u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

                            taskAffinity必须与singleTask模式使用,才会有效果。(书上说的,需要自己去验证)

        1.3  singleInstance单实例模式

               以下涉及到的activity的定义:

        <activity
            android:name=".launchmodeTest.StandardAActivity"
            android:label="A">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".launchmodeTest.SingleTopActivity"
            android:label="栈顶复用"
            android:launchMode="singleTop" />
        <activity
            android:name=".launchmodeTest.SingleTaskActivity"
            android:label="栈内复用"
            android:launchMode="singleTask" />
        <activity
            android:name=".launchmodeTest.SingleInstanceActivity"
            android:label="单独的一个栈"
            android:launchMode="singleInstance" />
        <activity
            android:name=".launchmodeTest.StandardCActivity"
            android:label="C"/>
        <activity android:name=".launchmodeTest.SingleTaskWithAffinityActivity"
            android:launchMode="singleTask" android:taskAffinity="com.cxy.test"></activity>

               1.3.1 在普通Activity跳转到singleInstance的Activity

                            StandardAActivity-->SingleInstanceActivity

  Running activities (most recent first):
    TaskRecord{52885efc #18 A base.example.com U 0}
      Run #2: ActivityRecord{52937648 u0 base.example.com/.launchmodeTest.SingleInstanceActivity}
    TaskRecord{52897aa0 #17 A base.example.com U 0}
      Run #1: ActivityRecord{528a6334 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

                            直接新启动了一个编号为18的任务栈来单独存放,并作为前台任务栈

                        1.3.1.1 在singleInstance的Activity跳转到普通Activity

                                         StandardAActivity-->SingleInstanceActivity-->StandardCActivity

  Running activities (most recent first):
    TaskRecord{52897aa0 #17 A base.example.com U 0}
      Run #3: ActivityRecord{52905030 u0 base.example.com/.launchmodeTest.StandardCActivity}
    TaskRecord{52885efc #18 A base.example.com U 0}
      Run #2: ActivityRecord{52937648 u0 base.example.com/.launchmodeTest.SingleInstanceActivity}
    TaskRecord{52897aa0 #17 A base.example.com U 0}
      Run #1: ActivityRecord{528a6334 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}
                        1.3.1.2 点击返回按钮
  Running activities (most recent first):
    TaskRecord{52897aa0 #17 A base.example.com U 0}
      Run #2: ActivityRecord{528a6334 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{52885efc #18 A base.example.com U 0}
      Run #1: ActivityRecord{52937648 u0 base.example.com/.launchmodeTest.SingleInstanceActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}
                         1.3.1.2 点击返回按钮
  Running activities (most recent first):
    TaskRecord{52885efc #18 A base.example.com U 0}
      Run #1: ActivityRecord{52937648 u0 base.example.com/.launchmodeTest.SingleInstanceActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

               1.3.2 在singleInstance的Activity跳转到SingleTop的Activity

                            StandardAActivity-->SingleInstanceActivity-->SingleTopActivity

  Running activities (most recent first):
    TaskRecord{528864b0 #21 A base.example.com U 0}
      Run #3: ActivityRecord{5288e658 u0 base.example.com/.launchmodeTest.SingleTopActivity}
    TaskRecord{5289313c #22 A base.example.com U 0}
      Run #2: ActivityRecord{527919fc u0 base.example.com/.launchmodeTest.SingleInstanceActivity}
    TaskRecord{528864b0 #21 A base.example.com U 0}
      Run #1: ActivityRecord{5276bcd4 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

               1.3.3 在singleInstance的Activity跳转到SingleTask的Activity

                            StandardAActivity-->SingleInstanceActivity-->SingleTaskActivity

  Running activities (most recent first):
    TaskRecord{52863e64 #23 A base.example.com U 0}
      Run #3: ActivityRecord{528acda4 u0 base.example.com/.launchmodeTest.SingleTaskActivity}
    TaskRecord{52830620 #24 A base.example.com U 0}
      Run #2: ActivityRecord{528aaa88 u0 base.example.com/.launchmodeTest.SingleInstanceActivity}
    TaskRecord{52863e64 #23 A base.example.com U 0}
      Run #1: ActivityRecord{528aa754 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

               1.3.4 在singleInstance的Activity跳转到SingleTask+AffinityActivity

                            StandardAActivity-->SingleInstanceActivity-->SingleTaskWithAffinityActivity

  Running activities (most recent first):
    TaskRecord{528cbc48 #27 A com.cxy.test U 0}
      Run #3: ActivityRecord{5288e658 u0 base.example.com/.launchmodeTest.SingleTaskWithAffinityActivity}
    TaskRecord{52832ec8 #26 A base.example.com U 0}
      Run #2: ActivityRecord{527919fc u0 base.example.com/.launchmodeTest.SingleInstanceActivity}
    TaskRecord{528c7cc0 #25 A base.example.com U 0}
      Run #1: ActivityRecord{5276bcd4 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

               1.3.5 在singleInstance的Activity跳转到 singleInstance的Activity

                            StandardAActivity-->SingleInstanceActivity-->SingleInstanceActivity

  Running activities (most recent first):
    TaskRecord{528009a8 #29 A base.example.com U 0}
      Run #2: ActivityRecord{528acda4 u0 base.example.com/.launchmodeTest.SingleInstanceActivity}
    TaskRecord{528ac1bc #28 A base.example.com U 0}
      Run #1: ActivityRecord{528aa754 u0 base.example.com/.launchmodeTest.StandardAActivity}
    TaskRecord{528c8b7c #2 A com.android.launcher U 0}
      Run #0: ActivityRecord{528aca90 u0 com.android.launcher/com.android.launcher2.Launcher}

                            对应的生命周期为:

11-28 08:07:00.135 3369-3369/base.example.com I/SingleInstanceActivity: onPause: 
11-28 08:07:00.135 3369-3369/base.example.com I/SingleInstanceActivity: onNewIntent: 
11-28 08:07:00.135 3369-3369/base.example.com I/SingleInstanceActivity: onResume: 

                        总结:singleInstance的Activity只会单独存放在一个堆栈中。并且对此启动都不会再次创建,只会调用onNewIntent相关的生命周期方法

2、设置intent的Flag属性

    FLAG_ACTIVITY_NEW_TASK:使用一个新的task来启动Activity。通常使用在service中启动Activity
    FLAG_ACTIVITY_SINGLE_TOP:使用singleTop模式来启动Activity
    FLAG_ACTIVITY_CLEAR_TOP:使用singleTask模式来启动Activity
    FLAG_ACTIVITY_NO_HISTORY:使用此模式启动的Activity,该Activity启动完其他Activity以后,此Activity会从栈中消失

    还有一些其他的属性,需要自己去试一下。

注意:

(1)、在优先级上:以上两种启动模式,设置intent的flag属性的优先级会更高。

(2)、在限定范围上,设置android:launchMode属性这种方式,无法为Activity设定FLAG_ACTIVITY_CLEAR_TOP标志。

        设置intent的Flag属性的方式,无法指定singleInstance的方式。

(3)、非特殊情况,尽量使用设置android:launchMode属性这种方式

转载于:https://my.oschina.net/u/2253892/blog/2054714

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34234829/article/details/92184611

智能推荐

Tomcat配置技巧Top10 _my club members only area realm-程序员宅基地

文章浏览阅读478次。转自:http://www.yuanma.org/data/2007/0119/article_2153_1.htm1、配置系统管理(Admin Web Application) 大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面。Tomcat按照自己的方式,同样提供一个成熟的管理工具,并且丝毫不逊于那些商业化的竞争对手。Tomcat的Admin _my club members only area realm

字符串模式匹配--KMP算法_使用kmp算法进行模式匹配,模式串ababaabab-程序员宅基地

文章浏览阅读476次。KMP算法的核心,是部分匹配表(Partial Match Table)数组。PMT数组存储字符串前缀集合和后缀集合的交集中最长字串的长度。以ababaca为例,对ababa来说,其字符串前缀集合为{a, ab, aba, abab},后缀集合为{baba, aba, ba, a}。故两集合交集对应的最长字串为aba,其长度为3,其对应的PMT数组中的值即为3。通过利用PMT数组存储重复模式,在字符_使用kmp算法进行模式匹配,模式串ababaabab

什么是Sass?_sass是什么意思-程序员宅基地

文章浏览阅读1.7k次。Sass 是 Syntactically Awesome Stylesheets 的简写,是一个最初由 Hampton Catlin 设计并由 Natalie Weizenbaum 开发的层叠样式表语言。什么是SassSass 是一个将脚本解析成 CSS 的脚本语言(SassScript),也是一款 CSS 预处理器,它减少了 CSS 的重复,也因此节省了时间。Sass 是最早的 CSS 预处理语言,有比 Less 更强大的功能。Sass 扩展了 CSS3,增加了规则、变量、混入选择器、继承等特性。什_sass是什么意思

caffe make runtest 错误解决_caffe make test -j`nproc`过不了-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏6次。迦南C的博客,转载请注明出处。当caffe编译 make runtest 出现如上错误时,原因是多gpu支持的bug。先 export CUDA_VISIBLE_DEVICES=0 ,再make runtest 即可解决。)*** Aborted at 1475986823 (unix time) try “date -d @1475986823” if you are using GNU..._caffe make test -j`nproc`过不了

[VB.NET]TCP/IP协议编程(简单SOCKTE编程)_vb.net tcp/ip-程序员宅基地

文章浏览阅读1.7k次。TCP协议是TCP/IP协议簇中的传输层中的一个协议,也是TCP/IP协议簇最为重要的协议之一。在TCP/IP协议簇中,有一个协议和TCP协议非常类似,这就是UDP协议,网络上进行基于UDP协议的数据传送时,发送方只需知道接收方的IP地址(或主机名)和端vb.net教程口号就可以发送UDP数据包。而接收方只需知道发送方发送数据对应的端口号,就能够接收UDP数据包了。传送数据的双方并不需要进行连接就能够实现数据通讯,这样就导致基于UDP协议的网络应用程序,在传送数据时无法保证可靠性、完整性和安全性。   而_vb.net tcp/ip

Leetcode刷题笔记(c++)_剑指 Offer 14- I. 剪绳子_leetcode c++ 笔记-程序员宅基地

文章浏览阅读127次。大厂大厂我来啦,leetcode刷题!_leetcode c++ 笔记

随便推点

阶段四第一章认识python和python变量的输入和输出-程序员宅基地

文章浏览阅读867次,点赞14次,收藏28次。计算机语言中可变的量。

Vue.js的第一天学习_vue 生命周期 mother-程序员宅基地

文章浏览阅读917次。Node (后端)中的MVC与前端中的MVVM之间的区别●MVC是后端的分层开发概念;●MWVM是前端视图层的概念,主要关注于视图层分离,也就是说: MVVM把前端的视图层,分为了三部分Model, View。VM ViewModel●为什么有了MVC还要有MVVM第一个Vue.js页面: </head><!-- 描述:1、导入Vue的包 --><body> <!-- 描述:用来new的Vue实例,会控制这个元素的所以内容 -_vue 生命周期 mother

使用jQuery更换图像_jquery图片切换-程序员宅基地

文章浏览阅读226次。jQuery是一种流行的JavaScript库,它简化了JavaScript编程,并提供了许多强大的功能。在jQuery中,可以使用一些简单的代码来更换图像。下面是一个详细的示例,演示如何使用jQuery更换图像。记得在实际使用中替换图像路径和元素ID,以适应你的具体需求。接下来,我们将创建一个包含图像的HTML元素,以及一个用于触发图像更换的按钮。现在,当用户点击"Change Image"按钮时,将会用新图像替换原始图像。在回调函数中,我们定义了新图像的文件路径和alt文本,并使用。_jquery图片切换

【ICML2022】LightNAS系列解读之一:基于最大熵原理的目标检测搜索方法MAE-Det_最大熵搜索-程序员宅基地

文章浏览阅读319次,点赞4次,收藏5次。本文解读我们ICML2022上发表的论文《MAE-DET: Revisiting Maximum Entropy Principle in Zero-Shot NAS for Efficient Object Detection》。_最大熵搜索

Java:实例方法和类方法_java类方法和实例方法-程序员宅基地

文章浏览阅读1.2k次,点赞5次,收藏11次。Java中的方法分为类方法和实例方法类方法:有static修饰,为静态方法,是类的方法。所以在类文件加载到内存时就已经创建。这里需要注意的是static关键字一定是最先申明的,在类型说明符之前static public void Fun(){ System.out.print("类的方法");}实例方法:对象的方法,只有对象创建后才起作用,所以在类方法中不能调用实例方法,但实例方法中..._java类方法和实例方法

【vuecli3 适配 element-ui plus】_element plus 要求vue cli 的版本-程序员宅基地

文章浏览阅读2.1k次。目录vue脚手架适配Element-ui plus新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入vue脚手架适配Element-ui plusvuecli3创建的项目,在使用element-ui时需要注意一定要适配el_element plus 要求vue cli 的版本

推荐文章

热门文章

相关标签