- 博客(12)
- 资源 (17)
- 收藏
- 关注
原创 Android Activity生命周期和启动模式
当一个具有singleTask模式的Activity请求启动后,比如Activity A,系统首先会寻找是否存在A想要的任务栈,如果不存在,就重新重建一个任务栈,然后创建A的实例后把A放在栈中。如果存在A所需的任务栈,这时要看A是否在栈中有实例存在,如果存在的话,就会把A上面的其他Activity的实例clear,将A调到栈顶并调用它的onNewIntent方法,如果不存在,就创建A的实例,并把A压入栈中。action的匹配规则是Intent中的action必须能够和过滤规则中的action匹配。
2024-08-02 17:57:13
859
原创 Android 同步锁
关键字锁的作用用法:可见性、有序性、原子性。可见性,当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存,当有其他线程需要读取时,它会去内存中读取新的值。另外synchronized也会保证可见性。有序性,我们通过关键字volatile确保指令不会重排。原子性,明为volatile,对它们的操作就会变成原子级别的。但这有一定的限制。如果对n的操作是原子级别的,最后输出的结果应该为n=1000,而在执行上面积代码时,很多时侯输出的n都小于1000,这说明n++不是原子级别的操作。
2024-08-01 16:07:08
1204
原创 Android的线程和线程池
线程分别主线程和子线程。在Android中,主线程也就是UI线程。在Android中,除了Thread本身以外,在Android中扮演线程角色的还有很多:AsyncTask、IntentService以及HandlerThread。对AsyncTask来说,底层使用了线程池。对与IntentService和HandlerThread来说,它们的底层则直接使用了线程。HandlerThread是一种特殊的线程,具有消息循环的线程,在它内部可以直接使用Handler。
2024-07-31 17:21:46
882
原创 Android View的工作原理
自定义View是一个综合的技术体系,它涉及View的层次结构、事件分发机制和View的工作原理等细节。自定义View的分类1.继承View重新onDraw主要是实现一些不规则的图形。重写onDraw方法。采用这种方式需要自己支持wrap_content, 并且padding也需要自己处理。2.继承ViewGroup派生特殊的Layout。
2024-07-30 18:07:58
833
原创 Android View的事件
在onInterceptTouchEvent方法中,首先ACTION_DOWN这个事件,父容器必须返回false,即不拦截,这是因为一旦父容器拦截了ACTION_DOWN,那么后续的ACTION_MOVE和ACTION_UP事件都会直接交由父容器处理,这个时候就没法再传到子元素了;都是View的内容在偏移。同一个事件序列是指从手指接触屏幕的那一刻起,到手指离开屏幕的那一刻结束,在这个过程中所产生的一系列事件:这个事件序列以Down事件开始,中间含有数量不定的move事件,最终以up事件结束。
2024-07-29 18:17:05
1739
原创 Android的消息机制
当Handler的send方法被调用时,它会调用MessageQueue的enqueueMessage方法将这个消息放入消息队列中,然后Looper发现有新的消息到来时,就会处理这个消息,最终消息中的Runnable或者Handler的handleMessage方法就会被调用。其实post方法最终也是通过send方法来完成的。Looper在Android的消息机制中扮演着消息循环的角色,它会不停地从MessageQueue中查看是否有新消息,如果有新消息就会立即处理,否则就一直阻塞在那里。
2024-07-26 15:52:17
792
原创 Android 性能优化
通过getContext()获取Context实例。Activity/Service:这两个类都是ContextWrapper的子类,在这两个类中可以通过getBaseContext() 获取他们的Context实例,不同的Activity或者Service实例,他们的Conetxt都是独立的,不会复用。绘制过程是CPU准备数据,通过Driver层把数据交给CPU渲染,其中CPU主要负责Measure,Layout,Record,Execute的数据计算工作,GPU负责Rasterization渲染。
2024-07-26 14:23:29
1814
原创 Android 启动流程
ActivityStack.resumeTopActivityLocked(获取栈顶的activity,并通知Launcher应该pause掉整个Activity以便启动新的Activity)ActiviyStack:Activity在AMS的栈管理,用来记录已经启动的Activity的先后关系,状态信息等。第三步:检查activity所在的进程是否存在,如果存在,直接通知这个进程,在该进程中启动Activity;不存在的话,会调用Process.start创建一个新的进程。
2024-07-25 12:29:04
355
原创 Android IPC
首先创建一个Service和一个AIDL接口,接着创建一个类继承自AIDL接口中的Stub类并实现Sub中的抽象方法,在Service的onBind方法中返回这个类的对象,然后客户端就可以绑定服务端Service,建立连接以后就可以访问远程服务端的方法了。Binder是Android中的一个类,它实现了IBinder接口。我们通过socket来实现进程间的通信。其次在客户端绑定服务端的Service,绑定成功后,将服务端返回的Binder对象转成AIDL接口所属的类型,接着就可以调用AIDL中的方法了。
2024-07-24 17:55:41
860
原创 Android JVM
每次使用其中一块,当内存不足时,将存活的对象复制到另一块上,然后清理掉是使用过的区域,这种算法解决了内存碎片问题,但牺牲了内存利用率,因为每次申请内存时只能使用一半的空间。优点简单,但存在效率问题和内存碎片问题,即标记和清除过程的效率不高,且清除结束后会造成大量的碎片空间,可能导致在申请大块内存时因为没有足够的连续空间而再次触发垃圾收集。a是栈帧中的本地变量,当a = null时,由于此时a充当了GC Root的作用,a与原来指向的实例new Test()断开了链接,所以对象会被回收。
2024-07-23 16:43:11
1759
1
原创 解读react-native-webview
本人出生于江西省新余市的一个小山村,山村所有人家都来自之前的胡氏家族的一个分支。整个村子就30多户人家,总人口不超过200。在我3,4岁时,大人告诉我中国的北京,北京还有清华大学,世界的美国时,我就脱口而出,我要去北京,我要去清华,我要去美国。然后,我也很争气,一直很努力,很听话,中考是全乡的第一名,然后进入江西省新余市的省重点高中新余四中。然后我依然很努力,也很争气,高一第一次其中考试我得了全校...
2021-03-16 10:35:46
803
转载 React Native与Android通信交互
转载https://blog.youkuaiyun.com/u013718120/article/details/55506238, 根据原文,加上自己的理解,稍微修改了代码。可以使React Native与Android整个流程跑起来。
2019-05-29 10:26:00
199
ReactNativeApp-master.zip
2019-05-29
GreenDaoDemo
2017-09-14
Handler异步消息处理机制创建图加载类
2016-09-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人