- 博客(16)
- 收藏
- 关注
原创 Activity横竖屏切换
直接进行横竖屏切换:竖屏启动:onCreate -->onStart–>onResume切换横屏:onPause -->onSaveInstanceState -->onStop -->onDestroy -->onCreate–>onStart -->onRestoreInstanceState–>onResume在切换到竖屏:...
2018-11-06 16:37:03 238
转载 Context的使用
大家注意看到有一些NO上添加了一些数字,其实这些从能力上来说是YES,但是为什么说是NO呢?下面一个一个解释:数字1:启动Activity在这些类中是可以的,但是需要创建一个新的task。一般情况不推荐。数字2:在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用。数字3:在receiver为null时允许,在4.2或以上的版...
2018-11-06 11:08:57 258
原创 ViewPager.PageTransform.transform(View page, float position)参数说明
对于第一个参数,就是你当前想要进行transform的view。第二参数position,我们通常会第一反应理解为是这个view在整个ViewPager中的第几个,但是在这里我们要注意,它并不是一个int型数据,而是一个浮点型,所以它代表的是第一个参数view的左上角x轴坐标参数。我们都知道,对于手机屏幕来说,屏幕左上角为坐标原点(0,0),那么在ViewPager显示第一个View时,Vie...
2018-11-02 13:39:46 327
转载 高效显示Bitmap
在Android应用中加载Bitmaps的操作是需要特别小心处理的,有下面几个方面的原因:移动设备的系统资源有限。Android设备对于单个程序至少需要16MB的内存。Android Compatibility Definition Document (CDD), Section 3.7. Virtual Machine Compatibility 中给出了对于不同大小与密度的屏幕的最低内存...
2018-09-05 15:01:09 202
转载 Android管理音频播放
控制音量与音频播放首先我们需要做的是鉴别使用的是哪个音频流。 Android为播放音乐,闹铃,通知铃,来电声音,系统声音,打电话声音与拨号声音分别维护了一个独立的音频流。这样做的主要目的是让用户能够单独地控制不同的种类的音频。上述音频种类中,大多数都是被系统限制。例如,除非你的应用需要做替换闹钟的铃声的操作,不然的话你只能通过STREAM_MUSIC来播放你的音频。使用硬件音量键来控制应...
2018-09-05 09:51:38 625
原创 FileProvider(三)
获取文件信息当一个客户端应用程序拥有了文件的Content URI之后,它就可以获取该文件并进行下一步的工作了,但在此之前,客户端应用程序还可以向服务端应用程序获取关于文件的信息,包括文件的数据类型和文件大小等等。数据类型可以帮助客户端应用程序确定自己能否处理该文件,文件大小能帮助客户端应用程序为文件设置合理的缓冲区。 获取文件信息分为以下两步:获取文件的MIME类型获取文件名及文件...
2018-09-04 15:20:47 182
原创 FileProvider(二)
请求分享一个文件当一个应用程序希望访问由其它应用程序所共享的文件时,请求应用程序(客户端)经常会向其它应用程序(服务端)发送一个文件请求。多数情况下,该请求会导致在服务端应用程序中启动一个Activity,该Activity中会显示可以共享的文件。当服务端应用程序向客户端应用程序返回了文件的Content URI后,用户即可开始选择文件。 请求分享一个文件通常分为以下几步:发送一个文件...
2018-09-04 14:57:58 205
原创 FileProvider(一)
FileProvider简介如果我们想在应用之间共享文件,那么我们就需要用到FileProvider这个类。他是属于ContentProvider的一个特殊子类,它让应用间共享文件变得更加容易,其通过创建一个Content URI来代替File URI。一个Content URI 允许开发者可赋予一个临时的读或写权限。当创建一个包含Content URI的Intent的时候,为了能够让另一...
2018-09-04 14:30:52 438
原创 Android存储
SharedPreferencesSharedPreferences的获取可以分为两种方式: 如果一个App需要很多SharedPreferences文件,并以名字作为区分的话,可以使用getActivity.getSharedPreferences(String name, int mode);方法指定名称和打开模式。 如果创建了一个MODE_WORLD_READABLE或者MO...
2018-09-03 16:57:46 104
原创 View篇(二)
MotionEvent手指接触屏幕后产生的事件类型有以下集中:ACTION_DOWN-——手指刚接触屏幕ACTION_MOVE———手指在屏幕上移动ACTION_UP——手指从屏幕上松开的一瞬间而一次手指触摸屏幕的行为会触发一系列的点击事件,考虑如下几种情况:点击屏幕后离开松开:DOWN —>UP点击屏幕滑动一会在松开:DOWN —> MOVE —>…...
2018-08-31 13:46:33 143
原创 View篇(一)
每个ViewGroup类都会实现一个扩展ViewGroup.LayoutParams的嵌套类。此子类包含的属性类型会根据需要为视图组的每个子视图定义尺寸和位置。子视图的在父视图中的位置信息可以调用以下函数获得 - ...
2018-08-31 13:46:24 230
原创 一张图理解Activity、Window和DecorView
Activity中持有一个Window对象,但Window是一个抽象类,所以Activity持有的是Window的实现类PhoneWindow。在PhoneWindow中有一个内部类DecorView,我们在一个Activity的onCreate方法中调用的setContenView就是在DecorView中设置,而且这个DecorView还继承与Fragment。...
2018-08-31 13:45:52 1130
原创 Intent学习篇
IntentIntent分为显式Intent和隐式Intent。Intent包含以下几项:组件名称、操作、数据、类别、Extra和标志。在启动服务的时候,为了确保应用的安全性,会使用显式Intent,并且不要为服务声明过滤器。因为在使用隐式Intent启动服务的时候无法确定哪些服务会响应Intent,并且用户无法看到哪些服务已经启动。从Android5.0开始,使用隐式Intent调用b...
2018-08-31 13:45:07 164
原创 关于Binder的一点笔记
AIDL文件中的asInterface这个方法是用来将服务端的Binder对象转换成客户端所需的AIDL接口类型对象,这种转换时区分进程的,那么如何区分呢?咱们先做一个实验,创建一个Service,在一个Activity中绑定它,然后再将Service设置为与Activity同一进程和不再同一进程两种情况,并打印出ServiceConnection 中绑定成功返回的IBinder,结果如下: ...
2018-08-31 13:43:30 262
原创 Android进程间通信IPC(一)
IPC方式使用Bundle,由于Bundle实现了parcelable接口,所以他可以方便的在进程间传输。基于这一点,当我们在一个进程中启动看另一个进程的Activity、Service和Receiver,我们就可以在Bundle中附加我们需要传输给远程进程的信息并通过Intent发送出去。当然,我们传输的数据必须能够被序列化,比如说基本类型,实现了Parcelable或Serializab...
2018-08-28 14:04:44 266
原创 View的事件分发体系
点击事件的传递其实就是事件的分发过程,需要由三个方法来共同完成:public boolean dispatchTouchEvent(MotionEvent ev)public boolean onInterceptTouchEvent(MotionEvent ev)public boolean onTouchEvent(MotionEvent ev)这三个方法调用关系是这样的(伪代...
2018-08-22 09:24:19 116
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人