Intent不仅是封装Android应用程序需要启动某个组件的“意图”,还是应用程序组件之间通信的重要媒介。本节开始来学习Intent的使用。...如果希望在 Activity 完成后收到结果,则可以调用 startActivityForResult()。...在程序中,如果需要在本应用中启动其他的Activity时,可以使用显式意图来启动Activity,其本例代码具体如下: // 创建Intent对象 Intent intent = new Intent...,只有当和中的内容同时匹配时,Activity才会被开启。...”);这个动作并没有指定category,这是因为清单文件中配置的“android.intent.category.DEFAULT”是一种默认的category,在调用startActivity()方法时
如果希望在 Activity 完成后收到结果,可以调用 startActivityForResult()。...系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。...当然只有在使用隐式intent的时候,Intent才会和Intentfilter有关系。...这个应用中声明有相同信息的组件将对这个意图做出响应。...如果未在 Intent 过滤器中声明此类别,则隐式 Intent 不会被任何被系统匹配到,所以永远不会有组件响应你的意图。
,接下来就用这些情况实现一个activity切换的特效 先看小效果,然后在讲原理是怎么实现的: 一。...这个应用程序中使用了一种下拉列表控件Spinner 选择样式输入框Spinner,用户不需要手动输入,而是选择 这节里面先不讲这个控件的知识点,关于这点请看我的下篇文章 1.在XML布局文件中定义这个控件...android:pivotY="50%" android:startOffset="200" android:duration="2000" /> 3.下来列表中的数据需要存在在...,这里的代码只能在startActivity()和finish()做完之后,系统才会处理被选择中了那个值 也就是说这里的执行顺序是严格规定的, 1)找出选中了那个item mAnimSp.getSelectedItemPosition...,第二参数为所进入的Activity的动画效果 跳转到另外一个activity类中,当返回键被触发的时候:又设定一种退出的效果 @Override public boolean onKeyDown
).toBundle()); 然后在B的onCreate方法中添加如下代码: //首先声明需要开启Activity过渡动画 getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS...(7)MD动画效果 Ripple效果 水波纹效果有两种:波纹有边界和波纹无边界。前者是指波纹被限制在控件的边界,后者指波纹不会限制在控件边界中,会呈圆形发放出去。...方法可以创建一个RevealAnimator动画,代码如下,其中centerX/centerY表示动画开始的位置,startRadius和endRadius分别表示动画的起始半径和结束半径。...在Android 5.X中,可以使用动画来作为视图改变的效果,有两种方式来实现该动画:StateListAnimator和animated-selector。...通知的显示等级 Android 5.x将通知分为了三个等级: VISIBILITY_PRIVATE:表明只有当没有锁屏的时候才会显示; VISIBILITY_PUBLIC:表明任何情况下都会显示; VISIBILITY_SECRET
虚拟机加载的时候就是独立加载到内存中的,不会依赖于任何其他类,而且这里面是把activity以弱引用的方式传到MyHandler中,即便是静态MyHandler类对象一直存在,但是由于它持有的是activity...(innerListener)或者setListener(this),innerListener是Activity内部定义的,this就是Activity对象,那么问题来了,回调监听并不一定马上返回,只有在触发条件满足的时候才会回调...,变量或者类是在app加载的时候就已经加载到内存中了,所以和单例有点相似,static变量也会一直持有Activity对象直到APP被杀死或者显示的把static变量置空 在Android5.0以上的WebView...导致的内存泄漏 这个问题只有在4.0的android系统上才会存在,在5.0以上的系统已经不存在了,应该是属于Android的一个缺陷 这里写图片描述 问题的根源应该就是这: loginPasswdEt.setTransformationMethod...控件的BackGround导致的内存泄漏(4.0android系统已经解决) 有时候为了避免图片反复的加载,就把第一次加载后的Bitmap或者Drawable用静态变量保存起来,但是要是把这种静态修饰的图片对象设置成控件的背景
在代码中,通过Scene.getSceneForLayout来创建Scene对象,再通过TransitionManager.go来加载指定的场景,代码如下所示。...在Explode中,动画通过TransitionPropagation计算每个动画的开始延迟,例如,默认情况下Explode使用CircularPropagation,动画的延迟取决于元素和Epicenter...,排除StatusBar和默认的ToolBar的动画效果,在xml中,可以在具体的Transition动画标签中设置,如下所示。...(intent, activityOptionsCompat.toBundle()) 延迟共享元素动画 在某些情况下,共享元素动画需要延迟一部分时间再执行,例如需要等布局渲染完毕,或者网络图片加载完成后再执行动画...先使用postponeEnterTransition暂停动画的执行过程,再在合适的场景下(例如在ViewTree渲染完成或者图片加载完成后),使用startPostponedEnterTransition
在堆栈中,只有栈顶的活动可以操作,也就是说一个任务中只有一个活动处于运行状态,其他的活动都转入到后台暂停运行,Android系统会保存这些活动的状态,以便它们在转入前台时可以恢复运行。...在控件对齐时要注意控件的排列方向,比如:当LinearLayout 的排列方向是 horizontal 时,只有垂直方向上的对齐方式才会生效,因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变...同样,当 LinearLayout 的排列方向是 vertical 时,只有水平方向上的对齐方式才会生效。...只有当动作和类别同时匹配时,活动才能响应 Intent。所以类别越多,动作就越具体,意图也就越明确。在下面的例子中,MY_ACTION动作定义了两个类别,一个是自定义类别,另一个是缺省类别。...,不加载到内存中。
(ScaleAnimation) 透明度(AlphaAnimation) 实现的方式: 1.实例相应的动画对象 2.加载资源中的动画文件 动画的属性 duration:动画持续的时间 filiAfter...帧动画: 实现方法 1.实例AnimationDrawable 2.在drawable新建类型为animation-list的xml文件,然后加载该文件 代码如下 package com.example.animaction...Animation.REVERSE); // 设置结束时状态,为true保持结束时状态,false变回原先的状态 alphaAnimation.setFillAfter(true); // 方法二: // 加载资源中的动画文件...ad.setOneShot(true); tv.setBackground(ad); ad.start();//开始动画 ad.stop();//结束之后再开始从头开始播放 //第二种 tv.setBackgroundResource...-- android:startOffset="3000":三秒之后才会执行 --> <alpha android:duration="3000" android:fromAlpha="1" android
因为好像只有这两个可以实现开头效果图展示的动画效果。...想到就做,先是在 style.xml 中设置透明: @android:color/transparent 然后实例化一个放大动画...、布局、绘制以及我们在 onCreate() 里写的一些加载数据、网络请求操作跟放大动画都挤到一起去了,甚至网络请求回来后更新界面时动画都还有可能在执行中,这样动画的流畅性就更惨了。...看 5.0+ 源码过程中,发现它在动画开始和结束前会调用一个 ViewGroup 的 suppressLayout() 方法,这个方法是隐藏的: ?...所以,当我们用 suppressLayout() 做了优化之后,就只有等动画结束的时候界面才会去重新 layout 刷新布局,优化动画流畅性。
Android系统定义了一套屏幕坐标规则,该规则不仅适用于当前的屏幕交互,在后文提及的动画绘制及其他屏幕相关操作等都同样适用。...只不过对按键的操作行为只有按下行为和抬起释放行为两种,而且按键的操作不需要用到屏幕坐标相关内容。 基于上文的介绍,可以在界面Activity中可以分别重写下边三个方法对用户的界面操作交互做出响应。...能够重写该方法的位置主要是android.app.Acitivty和android.view.View中,由于事件拦截只会发生在子视图的传递过程中,在界面中并不需要,所以事件拦截对应的方法只在android.view.GroupView...这就用到在加载界面一文中启动Activity所使用的android.content.Intent意图类了。...发送数据界面 在启动一个界面Activity之前要先创建意图对象,在该意图对象调用putExtras(Bundle bundle)方法,可以将要发送的数据打包成android.os.Bundle类型的实例存入
请记住,Dart 代码在您预热 FlutterEngine 后立即开始执行,并在您的 FlutterActivity/FlutterFragment 销毁后继续执行。...在一个典型的Flutter应用程序中,只有一个Dart入口点:main(),但你可以定义其他入口点。 FlutterFragment 支持为给定的Flutter体验执行所需Dart入口点的规格。...此外,在 Android N 之前的版本中,SurfaceView 不能使用动画,因为他们的布局渲染和 View 的层次结构的其他部分不同。...在这些应用中,用Fragment来控制系统chrome是合理的,比如Android的状态栏、导航栏和方向。 在其他应用程序中,片段仅用于表示 UI 的一部分。...在这些情况下,FlutterFragment 影响 Android 的系统 chrome 是不合适的,因为在同一个 Window 中还有其他 UI 片段。
** 要注意一点,drawable文件夹里面的图片命名是不能大写的 2)android:scaleType是控制图片如何resized/moved来匹对ImageView的size 在ImageView...View对象 View view; 3)加载布局: view = View.inflate(this, R.layout.welcome, null);//inflate 就是填充的意思.../ new出来一个AlphaAnimation类,实例化start_anima对象,在我们的成员变量声明的时候最好不要立马就new出来,只有用到的时候 // 才去new,这将可以节省内存的开销。...); 6)跳转函数的处理 protected void redirectTo() { // TODO Auto-generated method stub // 在这个函数里面,我们调用 意图...这里面还需要去关注两个个知识点: 1)就是动画类 android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation
进程中,并且调用ActivityManagerService.startActivity接口; Step 2....,比如要在APK中建立服务器与Android Studio进行通信,以及代码差异比对和替换等,在研发过程中可能出现白屏问题, 一般release版的程序是不会出现这种现象的; 如果接下来还会出现白屏问题.../style 加入了两个属性,windowIsTranslucent和windowNoTitle,将这两个属性都设置成true,就可以让程序在初始化的时候窗口是透明的,初始化结束后程序主界面才会显示出来...在4.4上调用reportFullyDrawn()方法会崩溃(但是log还是能正常打印),提示需要UPDATE_DEVICE_STATS权限 ,但是这个权限只有系统app才能授权。...在这个时间段内,WindowManager会先加载app主题样式中的windowBackground做为app的预览元素,然后再真正去加载activity的layout布局 冷启动时间优化 知道了Android
,另一个是主页面;还可以用一个Activity来做,程序启动时显现启动画面,当启动完成后,它会被隐藏来。...当我们调用 SplashActivity.finish()方法时(我们是在SplashActivity中通过SplashActivity.this.finish()调用的),SplashActivity...上图的例子是 从 Activity1 中启动了 Activity2,则当前处于栈顶端的是 Activity2,第二层是 Activity1,当我们在 Activity2中调用 Activity2.finish...程序启动时显现启动画面,当启动完成后,它会被隐藏来 布局文件: <?xml version="1.0" encoding="utf-8"?...当启动完成后,它会被隐藏。
在Androd Studio 新建项目完成后,会自动创建一个 Java 文件,这个文件就是 Activity,因为它继承系统 framework 层提供的 Activity,这里 AppCompatActivity...在这个方法中做一些初始化工作,比如调用setContentView去加载界面布局,初始化Activity所需要的数据等。后续调用onStart()。...此时可以做一些存储数据,停止动画等操作,但是注意不能太耗时,如果太耗时会影响到新的Activity的显示。onPause是先执行完,新的Activity的onCreate才会执行。...在应用程序退出时,必须把所有任务栈中的 Activity 清除栈时,任务栈才会被销毁。当然任务栈可以移动到后台,并且保存每个 Activity 的状态。...SingleInstance(单一实例模式) 单实例模式,是singleTask的加强版,具有singleTask所有特点,并且此种模式下Activity只有一个实例,并且只能单独的存在一个任务栈中。
Android创建与启动 以一个简单的Activity的创建与使用示说明: 创建 在Androd Studio 新建项目完成后,会自动创建一个 Java 文件,这个文件就是 Activity,因为它继承系统...在这个方法中做一些初始化工作,比如调用setContentView去加载界面布局,初始化Activity所需要的数据等。后续调用onStart()。...此时可以做一些存储数据,停止动画等操作,但是注意不能太耗时,如果太耗时会影响到新的Activity的显示。onPause是先执行完,新的Activity的onCreate才会执行。...在应用程序退出时,必须把所有任务栈中的 Activity 清除栈时,任务栈才会被销毁。当然任务栈可以移动到后台,并且保存每个 Activity 的状态。...SingleInstance(单一实例模式) 单实例模式,是singleTask的加强版,具有singleTask所有特点,并且此种模式下Activity只有一个实例,并且只能单独的存在一个任务栈中。
通常,在AndroidManifest.xml文件中设置了以下意图过滤器的Activity是Splash Activity。...we normally create the layout of our Splash Screen in our application: activity_splash.xml 通常,这就是我们在应用程序中创建启动画面布局的方式...在启动画面可见之前,您是否看到空白页面? The above approach isn’t the correct approach....启动屏幕的目的是在应用程序获取相关内容(从网络调用/数据库)中获取相关内容时,快速显示漂亮的屏幕。 使用上述方法, SplashActivity使用额外的开销来创建其布局。...使用主题并从SplashActivity中删除布局是创建初始屏幕的正确方法。 这结束了android启动画面教程。
虽然有对应的类,不过,在Android动画中,还是建议用XML来定义,其对应的标签如下所示 ? View动画的XML描述语法的固定格式 <?...View动画坐标系 在使用View动画时,就不得不提View的动画坐标体系,如下图,其坐标系是以View的左上角为原点,横向向右为x轴正方向,纵向向下为y轴正方向,在平移中toXDelta为正数表示以原点为参考沿...的原点向右偏移X个位置,同理,X<0时View动画的开始位置是以当前View的原点向左偏移X个位置 android:fromXDelta="X%",X>0 表示以View动画的开始位置是以当前View的原点向右偏移...为子元素指定具体的入场动画,本例中的代码如下 <set xmlns:android="http://schemas.android.com/apk/res/android" android:duration...,表示子元素开始动画的延迟,比如子元素的入场时间周期为500ms,那么0.5 表示每个子元素都要延迟500*0.5=250ms后才会开始播放。
:fromYDelta="0" // 视图在竖直方向y 移动的起始值 android:toYDelta="500" // 视图在竖直方向y 移动的结束值 /> 步骤3:在Java代码中创建..., android.R.anim.slide_out_right); 示意图 ?...Java代码中设置 Intent intent = new Intent(MainActivity.this, SecActivity.class); startActivity(intent); //...Java代码中设置效果 Intent intent = new Intent(MainActivity.this, SecActivity.class); startActivity(intent);...150ms才会播放动画效果 // 第一个子元素延迟150ms播放入场效果;第二个延迟300ms,以此类推 android:animationOrder="normal" //
简单的来说,就是把系统的程序拉出来变成我们自己执行代码片段。 要实现钩子函数,有两个步骤: 利用系统内部提供的接口,通过实现该接口,然后注入进系统(特定场景下使用) 动态代理(使用所有场景)。...我们是通过使用 hook 技术篡改 Intent,并将你真正的意图存放到我们新的 Intent 中。...所以说,我们可以在系统中自定义钩子,用来监视系统中特定事件的发生,完成特定功能,如屏幕取词,监视日志,截获键盘,鼠标输入等。...而且最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。 (3) 钩子特别是系统钩子会消耗消息处理时间,降低系统性能。...只有在必要的时候才安装钩子,在使用完毕后要及时卸载。
领取专属 10元无门槛券
手把手带您无忧上云