首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Activity启动模式SingleTask和Intent.FLAG_ACTIVITY_CLEAR_TOP区别

4种启动模式 standard:标准模式,也是系统默认的启动模式,如果一个 Activity 的启动模式是 standard,则该 Activity 可以被多次实例化,且可以在不同的任务栈中存在。...singleTop:栈顶复用模式,如果一个 Activity 的启动模式是 singleTop,则该 Activity 可以被多次实例化,且可以在不同的任务栈中存在,且一个任务栈可以存在多个 singleTop...在第一次启动这个 Activity 时,系统便会创建一个新的任务栈,并且初始化 Activity 的实例,放在新任务栈的底部。...还有一点: 无论 Activity 是在新任务栈中启动还是在相同的任务栈中启动,“返回”按钮始终会将用户带到上一个 Activity。...是一种单实例模式,在这种模式下,如果该Activity在栈中存在,那么多次启动此Activity都不会重新创建实例,而是销毁在它之上的所有Activity(不包括它本身),复用该Activity并调用它的

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android插件化技术之旅 2-广播插件的实现与安装apk原理

    本专题代码地址 在上一篇文章中,我们实现了,如何启动一个插件,和启动插件内的Activity和Service....启动插件到一个Activity(注意插件中的Activity必须是launchMode="standard",我们会在后续解决这个问题),其实就是启动宿主(app)中的一个空壳的Activity(ProxyActivity...插件中动态广播的实现: 启动插件中的动态广播其实和启动Activity和Service是一样的流程....真正的加载广播,是发生在系统启动时, 系统启动可以理解成 将所有app重新安装一遍到系统中,会重复上述过程....中只存放了ActivityInfo,继续点进去ActivityInfo中是否有我们想要的类名等信息 ActivityInfo extends ComponentInfo ComponentInfo extends

    65920

    Android中ActivityManager学习笔记(1)-MemoryInfo「建议收藏」

    首先我们创建一个程序,在入口Activity里的onCreate()方法里,我们来创建ActivityManager....ActivityManger对象.在官方文档中,并没有提供构造方法,所以我们不能通过new的方式创建该对象,由于ActivityManager是核心服务,所以android从系统服务里得到它的实例。...);//传入参数,将获得数据保存在memInfo对象中 long availMem = memInfo.availMem/1000000;//可用内存 boolean isLowMem = memInfo.lowMemory...上一次提交给进程的内饰水平 Log.i(TAG, "lastTrimLevel: "+lastTrimLevel); int lru = info.lru;//在一个特殊的进程中,提供更精细密度的衡量值...中处于最顶端的activity Log.i(TAG, "topActivity: " + topActivity); int content = info.describeContents();//描述文本

    75540

    记一场 Android 技术答疑

    字符串拼接无法避免的创建StringBuilder对象 如果是循环情况下拼接,需要显式在循环外声明一个StringBuilder对象 不好的代码 1 2 3 4 5 6 7 public void...中Handler引起的内存泄露 详解 Android 中的 HandlerThread 网络数据返回先通知界面还是先更新数据库 通常境况下,可以选择先更新界面再更新数据库 如果数据很重要,建议先更新数据库在通知界面更新...内存泄露可以简单理解成:生命周期长的对象不正确持有了持有了生命周期短的对象,导致生命周期短的对象无法回收。...比如Activity实例被Application对象持有,Activity实例被静态变量持有。...关于Android中内存泄漏的文章 Android中Handler引起的内存泄露 避免Android中Context引起的内存泄露 Google为何这样设计OnSharedPreferenceChangeListener

    52720

    裁剪SystemServer服务以及关闭SystemFeature

    SystemServer启动了系统的核心服务,除此之外,SystemServer还启动了很多其他服务,具体是在startOtherServices()方法中。我们要裁剪不需要的服务就可以从这里入手。...从全局属性读取配置, boolean disablePrinter = SystemProperties.getBoolean("config.disable_printer", false); 然后在启动服务的代码段添加对这个属性的判断...裁剪服务引发的问题 服务不是你不让它Start就完事儿了,系统那么大,总有一些地方会获取服务对象做一些调用处理。...通过阅读代码,了解到系统里有很多Loader类型的对象,其中一个子类就是PrintServicesLoader。然后这些Loader是由LoaderManager管理启动的。...frameworks/native/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml 这个文件在源码中的位置是

    3.5K00

    Android事件处理机制

    ,而事件处理中的初见处理器方法是由系统负责调用的 程序中实现监听器有以下几种方法 内部类形式 外部类形式 匿名内部类形式 Activity作为事件监听器类形式(activity本身实现监听器接口...Ui线程修改activity的ui组件,新的进程需要动态改变界面组件的属性值时,就需要用到Handler了 4.1Handler类简介 Handler类主要有两个作用:在新启动的线程中发送消息,...在主线程中获取和处理消息 只能通过回调的方法来实现-开发者只需要重写Handler类中处理的消息的方法即可,当新启动的线程发送消息时,消息会发送到与之关联的MessageQueue,而Handler...上面代码中的Timer类会启动一个新线程,由于不允许在线程中修改UI界面,所以该线程每隔1200毫秒会发送一个消息,该消息会传递到Activity中,再由Handler类进行处理,从而实现了动态切换的效果...,但是有两个缺点 1.造成程序的混乱,Activity的主要作用是完成初始化界面的工作,但是此时居然还要包含时间处理方法,可能会引起混乱 2.Activity实现监听器接口,那么他给开发者的感觉会比较奇怪

    88930

    Flutter项目 安卓 运行时闪退解决方案

    模式下依旧无法查询到报错, 全网搜索下, 依旧没有找到结果, 所以我描述下我的解决过程: 解决 adb命令在Android开发中有很大的作用, 在Mac上可以通过命令brew install android-platform-tools...00-00 00:00:00.000 7754 7754 E AndroidRuntime: java.lang.RuntimeException: Unable to instantiate activity...ComponentInfo{cn.timemail.xsot/cn.timemai.xsot.MainActivity}: java.lang.ClassNotFoundException: Didn't...ComponentInfo 查询过后, 发现是因为Flutter的默认包名 好像是 com.example.flutter还是什么,但是我讲其直接修改为了cn.timemail.xsot 但是在manifest.xml...中依然使用的旧的注册信息 android:name=".MainActivity" 我们只需要在AndroidManifest.xml中 将其改为 cn.timemail.xsot.MainActivity

    6.2K20

    金九银十面试归来:这是一份用心整理的Android面试总结

    从上图可知,JVM主要包括四个部分: 1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中。...因为String已经在启动时就被引导类加载器(Bootstrcp ClassLoader)加载,所以用户自定义的ClassLoader永远也无法加载一个自己写的String,除非你改变JDK中ClassLoader...而ArrayList不是,这个可以从源码中看出,Vector类中的方法很多有synchronized进行修饰,这样就导致了Vector在效率上无法与ArrayList相比; 2).两个都是采用的线性连续空间存储元素...6、异常中使用泛型的问题 7、数组(这个不属于类型擦除引起的问题) 9、类型擦除后的冲突 10、泛型在静态方法和静态类中的问题 最近面试被怼了?...这里的对象是指Activity、ViewGroup、View. 2).Android中事件分发顺序:Activity(Window) -> ViewGroup -> View. 3).事件分发过程由

    52730

    【Android 插件化】Hook 插件化框架 ( 从 Hook 应用角度分析 Activity 启动流程 一 | Activity 进程相关源码 )

    Activity 启动过程 | 静态代理 ) 使用了静态代理 , hook 了 Activity 的启动过程 ; 在 hook Android 的内部流程时 , 注意版本兼容 , 不同的 Android..., 在 Android 10.0 可能就无法使用了 ; Hook 插件化框架的 难点是版本兼容 , 需要逐个手动兼容 Android 低版本到最新版本 , 一旦系统更新 , 或者某厂商 ROM 更新...ActivityStack ( 任务栈 ) 中 ; 任务栈管理者 : ActivityStack 由 ActivityStackSupervisor 来管理 , ActivityStackSupervisor..., 列表中第一个 Activity 是最近最少使用的 ; ActivityRecord 就是 Activity 的信息 , 注意不是 Activity 的实例对象 , 是历史任务栈中的一个条目 , 可以代表一个...源码分析 在上一篇博客 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 ) 一、分析 Activity 启动源码 章节中分析到 , 在 Activity

    56310

    Android 关于内存泄露,你必须了解的东西

    前言 内存管理的目的就是让我们在开发过程中有效避免我们的应用程序出现内存泄露的问题。内存泄露相信大家都不陌生,我们可以这样理解:「没有用的对象无法回收的现象就是内存泄露」。...,但是堆内存无法通过 GC 释放足够的空间,堆内存也无法再继续增长,从而完成对象创建请求的时候,OOM 发生很有可能是内存泄露导致的,但并非所有的 OOM 都是由内存泄露引起的,内存泄露也并不一定引起...Activity 中继承 AsyncTask 自定义了一个非静态内部类,在 doInbackground() 方法中做了耗时的操作,然后在 onCreate() 中启动 MyAsyncTask。...(null); 3、集合类 集合类添加元素后,仍引用着集合元素对象,导致该集合中的元素对象无法被回收,从而导致内存泄露,举个例子: static List objectList =...解决方法:在集合元素使用之后从集合中删除,等所有元素都使用完之后,将集合置空。

    1.2K10

    【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( 使用 DexClassLoader 获取组件类失败 | 失败原因分析 | 自定义类加载器没有加载组件类的权限 )

    DEX 字节码中的 Activity 组件 ( DEX 文件准备 | 拷贝资源目录下的文件到内置存储区 | 配置清单文件 | 启动 DEX 文件中的组件 | 执行结果 ) 中 , 尝试启动 DEX 字节码文件中的...Activity 组件 , 出现如下报错信息 : 2021-12-12 01:02:01.431 25158-25158/?...ComponentInfo{com.example.classloader_demo/com.example.dex_demo.MainActivity2}: java.lang.ClassNotFoundException...组件类失败了 ; 其中的最主要原因是 , 类加载器的双亲委派机制 , 加载 Android 组件类需要使用系统指定的类加载器 , 这些类加载器设置在 LoadedApk 实例对象中 , 并且这些类加载器只能从特定位置加载字节码文件..., 在 组件类加载器 和 最顶层的启动类加载器之间插入自定义的 DexClassLoader 类加载器即可 ;

    1.1K30

    Android Hook Activity 的几种姿势

    ); } 到此,hook Activity 的三种方式已讲解完毕 ---- 启动一个没有在 AndroidManifest 声明的 Activity 我们知道,当我们启动一个没有在 AndroidManifest...而我们知道我们启动的 activity 信息都储存在 intent 中,那么我们若想要 启动一个没有在 AndroidManifest 声明的 Activity,那我们只需要在 某个时机,即调用 startActivity...amsField.set(gDefaultObj, amsObj); } 接着,我们在动态代理对象中,当调用 startActivity 方法的时候,我们把 intent 信息替换,校验的时候就可以绕过系统对...中的实现将收到的请求进行封装后送入 Handler -> 从 Handler 中取出这个消息,开始 app 本地的 Activity 初始化和启动逻辑。...小结 启动没有在 AndroidManifest 注册的 Activity 课改可以分为连个步骤 在 AMS 通过 intent 校验 activity 是否注册的时候,用已经在 AndroidManifet

    1.4K10

    Android面试知识笔记:那些年面试官常问的知识点...(附详细解析)

    以singleInstance模式启动的Activity在整个系统中是单例的,如果在启动这样的Activiyt时,已经存在了一个实例,那么会把它所在的任务调度到前台,重用这个实例。...Activity的启动过程 app启动的过程有两种情况,第一种是从桌面launcher上点击相应的应用图标,第二种是在activity中通过调用startActivity来启动一个新的activity。...这三个类虽然分别各种承担着不同的作用,但它们都属于Context的一种,而它们具体Context的功能则是由ContextImpl类去实现的,因此在绝大多数场景下,Activity、Service和Application...在这些资源不使用的时候,记得调用相应的类似close()、destroy()、recycler()、release()等方法释放 集合对象没有及时清理引起的内存泄漏 通常会把一些对象装入到集合中,当不使用的时候一定要记得及时清理集合...产生的原因: 5s内无法响应用户输入事件 广播在10s内无法结束 Service在20s内无法结束 总结 最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的

    50700

    ViewPager无限滑动

    生成的View对象一定要添加到container中才可以正常显示。返回的Object对象是和此View关联的一个自定义对象(类似View.setTag),比如可以把一个对应View的数据对象返回。...根据前面的分析,在destroyItem中,我们把position处的page view从container移除即可,此处的object对象正是instantiateItem中add到container...经过我的实验,在pageCount非常大的时候,setCurrentItem方法如果引起ViewPager的页码切换跨度大于1时,就会引起明显的卡顿。...但是,如果代码中有逻辑setCurrentItem引起页码变化大于1,比如当前在第3页,直接切换到getCount() / 2页时,直接就ANR了。...有意思的是,在onCreate中setAdapter之后,第一次viewPager.setCurrentItem(adapter.getStartPageIndex())并不会引起ANR,应该是onCreate

    2.2K70
    领券