我在 "com.android.server.am.ActivityManagerService" 拿到其成员 mProcessList 里的 mLruProcesses 对象,ArrayList类型:
mLruProcesses
=
(ArrayList<?>) XposedHelpers.getObjectField(mProcessList, Enum.Field.mLruProcesses);
for
(
Object
obj:mLruProcesses){
/
TODO 线程安全?
do something...
}
在遍历访问时,该对象在原来的进程里可能还有其他线程对其修改,只读遍历会不会有线程安全问题?有问题的话,该如何避免。
或者,通过Hook Replace另一个对其有访问行为的method,这个方法是有@GuardedBy()修饰锁的,我再 XposedHelpers.callMethod 不知是否安全?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
军哥i 不安全的,在遍历的时候,如果这个list的内容减少了,你这段代码就直接崩了,你可以new 一个list,然后将原数组的内容复制到新数组,对新数组进行遍历
你瞒我瞒 如果只是想遍历的,你可以创建一个新的list,把你关注的list倒进入新的list中,你操作新的list就行
全都是HOOK 这不就是纯Java多线程问题么, 怕线程不安全就加锁呗