第一行代码安卓第二版P65页: onCreate()这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动第一次被创建的时候调用,你应该在这个方法中完成活动的初始化操作,比如加载布局...以上7个方法中除了 onRestart()方法,其他都是两两相对的,从而又可以将活动分为三种生存期。 完整生存期。...活动在onCreate()方法和onDestory()方法之间所经历的,就是完整生存期,一般情况下,一个活动会在onCreate()方法中完成各种初始化操作,而在onDestory()方法中完成释放内存的操作...我们可以通过这两个方法,合理地管理那些对用户可见的资源,比如在onStart()方法中对资源重载,在onStop()方法中对资源进行释放,从而保证处于停止状态的活动不会占用过多内存。 前台生存期。...在前台生存期呢,活动总是处于运行状态的,此时的活动是可以和用户进行交互的,我们平时看到和接触的最多也就是这个状态下的活动。
类加载器 二、完整代码示例 三、执行结果 四、博客资源 前言 ---- 在 上一篇博客 【Android 逆向】启动 DEX 字节码中的 Activity 组件 ( DEX 文件准备 | 拷贝资源目录下的文件到内置存储区...---- 参考 【Android 逆向】加壳的 Android 应用启动流程 | 使用反射替换 LoadedApk 中的类加载器流程 二、使用反射替换 LoadedApk 中的类加载器流程 博客章节...// 替换 LoadedApk 中的 类加载器 ClassLoader // 然后使用替换的类加载器加载 DEX 字节码文件中的 Activity 组件...类加载器 ClassLoader , 然后使用替换的类加载器加载 DEX 字节码文件中的 Activity 组件 ; 完整代码示例 : package com.example.classloader_demo...(this, mDexPath); // 替换 LoadedApk 中的 类加载器 ClassLoader // 然后使用替换的类加载器加载 DEX 字节码文件中的 Activity
大家好,又见面了,我是你们的朋友全栈君。...Activity 跳转页面工具类 package com.kun.arno.test.tools; import android.content.Intent; import android.support.v4...* @param data 传递{@code key} jumpTo {@code value} Serializable序列化的数据 */ public 的key * @param data 传递Serializable序列化的数据 */ public <T extends...clazz, requestCode, null); } /** * startActivityForResult with bundle ( fragment要返回值的方法
); startActivity(intent); 方法二: Intent intent2=new Intent(); intent2.setClass(本类,将要跳转的类); // intent2.setClass...Intent intent = new Intent(); intent.setAction(“con.liujc.test.jump”); startActivity(intent); 需要将要跳转到的Activity...在AndroidManifest.xml中设置action: 通过Scheme跳转协议跳转: android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,...可以非常方便跳转app中的各个页面;通过scheme协议,服务器可以定制化告诉App跳转那个页面,可以通过通知栏消息定制化跳转页面,可以通过H5页面跳转页面等。...goodsId代表传递的参数 8080代表该路径的端口号 URL Scheme如何使用: 在AndroidManifest.xml中对标签增加设置Scheme: android:name=”.GoodsDetailActivity
上一期我们学习了Activity的创建和配置,当时留了一个悬念,如何才能在默认启动的Activity中打开其他新建的Activity呢?那么本期一起来学习如何启动和关闭Activity。...至于应用中的其他Activity,通常都由入口 Activity启动,或由入口 Activity启动的Activity启动。 Activity启动其他Activity有如下两个方法。...关于Intent的详细使用会在后续部分学习,这里先知道创建Intent对象的两个方法,在开发中根据自己喜好选择使用其中一种即可,具体代码如下。...该Module一共包含了2个Activity,并在AndroidManifest清单文件中配置两个Activity。...点击MainActivity中的启动按钮,可以启动SecondActivity,如上图右侧所示。
mWindow对象 查看Activity源码,找到在attach方法中对mWindow做了赋值。...的attach方法是Activity生命周期的第一个方法,它是ActivityThread中performLaunchActivity方法调用的,这是通过AMS(ActivityManagerService...从代码中可以看出显示获取当前窗口的根ViewGroup(mDecor),然后往这个ViewGroup中添加view。...最终我们要展示在Activity中的View已经构造好了,那么在Activity的onResume 方法之后,在 ActivityThread#handleResumeActivity 方法中会将该View...下边介绍在我学习过程中膜拜的博客,感觉这些大牛就是点亮我前行的灯塔,哈哈哈。
大家好,又见面了,我是你们的朋友全栈君。...defined in android.content.Intent 分析问题: 这是因为kotlin中不能像java那样使用AActivity.this,kotlin无法识别为Context 解决问题:...网上很多写法是这样的: override fun onClick(widget: View) { val intent = Intent(AActivity@this, BActivity...::class.java)//AActivity@this这种写法是错误的 startActivity(intent) } 但是发现还是报错了,正确的写法应该是这样的: override fun...,整个栈中就D页面 startActivity(intentFor().newTask().clearTask()) 但是试了一下发现报错了,原来这并不是kotlin自带的写法
PhoneWindow的setContentView方法(PhoneWindow是Window的具体实现类)。...在setContentView中,PhoneWindow的setContentView方法中的下面两种方式都把这个FrameLayout作为了main_activity.xml的根视图: 1. mLayoutInflater.inflate...这里的mContentParent指的是屏幕显示的内容区,而我们设置的activity_main.xml布局实际上是在一个id为content的FrameLayout中的,这个FrameLayout也就是前面一直提到的...启动Activity调用完ActivityThread的main方法之后,接着调用ActivityThread类performLaunchActivity来创建要启动的Activity组件,在创建Activity...组件的过程中,还会为该Activity组件创建窗口对象和视图对象;接着Activity组件创建完成之后,通过调用ActivityThread类的handleResumeActivity将它激活。
大家好,又见面了,我是你们的朋友全栈君。...会调用当前Activity的Window的setContentView()方法,而Window类是一个抽象类,唯一实现类PhoneWindow。...PhoneWindwo对象在Activity中的attach()方法中创建。...mDecor.makeOptionalFitsSystemWindows(); //.... } } mDecor是DecorView类对象,而DecorView继承自FrameLayout...(ViewGroup)findViewById(ID_ANDROID_CONTENT); 最后返回contentParent,将setContentView()中的视图加载到mContentParent
有些时候我们需要获取到View的宽高信息。在onCreate和onResume中尝试view.getWidth()或是view.getHeiht()时,我们会发现获取到的是0。...Activity视图在创建完成后,各个子view并不一定被加载完成。 获取宽高正确的方法有哪些呢?...方法1 - 在Activity的onWindowFocusChanged获取宽高 @Override public void onWindowFocusChanged(boolean hasFocus)...getViewTreeObserver().removeOnGlobalLayoutListener(this); } }); 方法3 - 使用View.post(Runnable action)方法 例如我们在onCreate中post...xml中设置scaleType为fitXY。已知ImageView的宽度是固定的,我们可以调整高度。
onResume 比如做一个音乐播放程序,在播放过程中,突然有电话打进来了,这时系统自动调出电话,而你的音乐播放程序置于后台,触发了onPause方法。...键回来时 就调onResume 不调onCreate, 还有就是 App用到一半 有事Home键切出去了 在回来时调onResume 首先要知道Activity的四种状态: Active/Runing...一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。...Paused 当 Activity 被另一个透明或者 Dialog 样式的 Activity 覆盖时的状态。...举个简单的例子,如果界面上弹出了一个对话框使得activity处于失去焦点不可操作的时候,你再关闭对话框就只调用了onResume(),并没有调用OnStart(), 发布者:全栈程序员栈长,转载请注明出处
(4)Android4.2增加了一个layoutDirection属性,当改变语言设置后,该属性也会成newConfig中的一个mask位。...需要在android:configChanges 中同时添加locale和layoutDirection。在不退出应用的情况下切换到Settings里切换语言,发现该Activity还是重启了。...1.你正在编辑信息,这个时候跳出来一个透明提示框,Activity就进入了Paused状态,你想再次回到这个Activity时看到你编辑到一半的信息,就需要在onPause()回调方法中来执行这些操作。...所以这个时候,你就需要在onStop()回调方法中来执行这些操作。...所以综上所述,之所以会设计出不同的生命周期状态,以及各状态间转换时的回调方法,就是为了适应用户使用过程中的不同场景,进而在特定的场景让Activity完成特定的事情,以此来确保提供一个流畅的用户体验。
但是在写demo测试的时候,发现这个说法是不准确的。这句话成立的条件是,要启动的Activity的affinity是唯一的,即当前所有的任务中没有与该affinity相同的任务。...Demo中包含两个Activity,Activity的LaunchMode: MainActivity-Standard SecondActivity- SingleTask 步骤: 启动MainActivity...总结 “singleTask”模式启动的Activity,在启动时,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务是否存在:如果存在,则在该任务中启动;如果不存在,则会在新任务中启动...因此,如果想要设置“singleTask”启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity的值。...如果设置了“singleTask”启动模式的Activity不是在新的任务中启动的,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,会调用该实例的onNewIntent,并且会把位于这个
Android中Activity中左右滑动手势的监听 /* * 完成对左右划屏 */ @Override public boolean onTouchEvent(MotionEvent
////////////////////user实体类 package com.example.shaomiao.testdemo; import android.os.Parcel; import android.os.Parcelable
文章目录 一、打印 Android 中当前运行的 Activity 任务栈信息 二、Activity 任务栈信息分析 三、Activity 在相同 Stack 的不同 Task 情况 一、打印 Android...中当前运行的 Activity 任务栈信息 ---- 使用如下命令 , 打印 Android 手机中的 Activity 栈 : adb shell dumpsys activity activities...; 默认状态下 , 相同的应用 , 打开的 Activity , 其 Activity 都在同一个任务栈中 ; 三、Activity 在相同 Stack 的不同 Task 情况 ---- 默认状态下..., 同一个应用启动的两个 Activity 都在相同 Stack 的相同 Task 中 , 但是如下情况会出现 Activity 在相同 Stack 的不同 Task 中 ; 参考 【Android...singleTask 启动模式 , 则新启动的 Activity 放在另一个 Task 中 ; 注意 : 两个 Activity 虽然在不同的 Task 任务中 , 但还是在相同的 Stack 栈中
遇到一个问题,需要在一个activity中控制另一个acitivity做一些更新,没想到传递handler的方法,通过以下方式解决。...handler) { this.handler = handler; } // get方法 public MyHandler getHandler() { return handler; } } 2、在主activity...中给MyAPP的属性handler赋值 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState...new Intent(MasterActivity.this, ToChangeViewActivity.class); startActivity(intent); } }); } 3、在另一个activity...中获取MyAPP中handler进行传值 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState
在这个方法中,我们可以做一些初始化工作,比如调用setContentView去加载布局文件,初始化Activity所需的数据。 onRestart 表示Activity正在重启。...这种场景一般是用户行为导致的,比如用户按Home键切换到桌面,或者打开一个新的Activity,这时当前的Activity就会暂停,也就是onPause和onStop会被调用,接着用户又回到这个Activity...要注意这个和onStart的对比,onStart和onResume都表示Activity已经可见,但是onStart的时候Activity还在后台,onResume的时候已经到前台了。...此时可以做一些数据存储、停止动画等工资,但注意到不能太耗时,因为这会影响到新的Activity的显示,onPause必须先执行,新的Activity才会执行onResume. onStop 表示Activity...从Activity是否可见来说,onStart和onStop是配对的,随着用户的操作或者设备屏幕的点亮,这两个方法会被调用多次;从Activity是否前台来说,onResume和onPause是配对的,
Activity 类 ) 【Android 插件化】Hook 插件化框架 ( Hook Activity 启动流程 | 主线程创建 Activity 实例之前使用插件 Activity 类替换占位的组件...字段 4、反射获取 mActivityCallbacks 成员对象 5、使用插件 Activity 对应的 Intent 替换 LaunchActivityItem 类中的 mIntent 字段 6、...注册过的 占坑 Activity ( StubActivity ) 执行启动流程 , 在主线程生成 Activity 实例对象时 , 还需要恢复插件包中的 Activity 二、分析主线程中创建 Activity...mH 中的 mCallback 静态代理类 ---- 静态代理 ActivityThread 中的 final H mH = new H() 成员中的 mCallback 成员 ; 该静态代理类的主要作用是..., 在创建的 Activity 示例类之前 , 使用插件包中的 Activity 组件替换之前在 AMS 调用之前使用的 占坑用的 Activity , 就是要创建 插件包 中的 Activity 类的实例对象
可以通过该方法获取Activity引用,还可以通过getArguments()获取参数。...类或其子类,同时实现onCreate()方法,在方法中,通过inflater.inflate加载布局文件,接着返回其View 在需要加载Fragment的Activity对应布局文件中的name属性设为全限定类名...方式添加,在由于内存紧张导致Fragment被系统杀掉并恢复(re-instantiate)时能保留这些数据 可以在Fragment的onAttach()中通过getArguments()获得传进来的参数...Fragment与Activity的通信交互如上图所示: 如果Activity中包含自己管理的Fragment的引用,可以通过引用直接访问所有的Fragment的public方法 如果Activity中未保存任何...(String code); } Fragment类中定义该接口 private Mylistener listener; 在onAttach方法中,将定义的该接口强转为activity类型 @Override