Android11 , Launcher3 切换阿拉伯语,最近应用(后台)不能滑动
1.Android 11 -- 强制清理app后台,关于权限引发的问题2.Android 11 (MTK)状态栏图标反色-->跟随当前应用变化代码流程3.Android 11 --关于Toast的异常4.Android 11 -- 关于dialog和悬浮窗导致SystemUI状态栏下拉频繁闪烁(窗口焦点问题)5.Android 11 下拉菜单长按WiFi图标SystemUI ANR6.Android 11 sim卡来电不弹出悬浮通知,默认来电默认全屏7.Android Bluetooth 蓝牙开发/蓝牙协议 小结8.Android11 —— 自定义添加一个System Services9.Android系统——AOSP相关-->随记
10.Android11 , Launcher3 切换阿拉伯语,最近应用(后台)不能滑动
11.Android 底层问题日志记录12.Android 11 -- app 服务保活13.Android11 - 添加自定义服务注意事项14.Android 11 导航栏添加一个虚拟按钮--问题合集15.Android 11--设置第三方Launcher并默认 与 如何预置apk16.Android11 系统修改 AOSP输入法的默认输入键盘布局17.Settings里面切换不同Launcher的代码流程18.关于Android`系统默认屏保`19.关于Android 11 Settings添加新的选项界面的细节20.Android 11 自由窗口模式 || 全屏模式启动app21.强制app横屏显示或者竖屏显示(动态)22.Android 11 禁止从SD卡上安装第三方应用23.实体物理音量键替换为home键24.AMS- kill Launcher进程的代码流程25.Android 11 recovery恢复出厂设置保留某些文件26.Android 11 禁用 adb root (userdebug版本)27.Android11 应用默认获取通知使用权限(可以获取系统所有通知信息)28.Android 11 UsbDebug 关于adb RSA 认证29.Android 11 NavigationBar && Status Bar 如果改变背景颜色30.Anroid 11 关于NotificationManager && NotificationManagerService -- 衍生到权限管理31.Android13 控制设置界面 双栏显示或单栏显示32.Android 13 大屏显示时关于SystemUI和Launcher3问题33.Android 系统适配无源码app34.Android 11 关于app的权限重置35.Android 11.0 关于app进程保活36.Android 11 关于按键拦截/按键事件处理分享37.Android R Settings关于屏保/PowerManagerService欺骗系统不让其进入休眠状态38.Android13 关于SystemUI更新/Nav Bar add volume button&&other button39.Android 13 移植EthernetSettings/Ethernet更新40.Anrdoir 13 关于设置静态IP后,突然断电,在上电开机卡动画41.Android T(13) The app is granted permissions by default42.Android T 关于屏幕旋转 (一)43.Android T about screen rotation(二)44.Android 13 about launcher3 (1)45.Android T don't abort background activity starts46.Android T adout replace bootanimation47.Launcher start App WINDOWING_MODE_FREEFORM48.Android 11 About SleepToken / (Settings)Screen timeout49.Settings.System数据监听/prop&SystemProperties数据监听Launcher3 切换阿拉伯语,最近应用(后台)不能滑动
Launcher3QuickStep.apk
quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
src/com/android/launcher3/PagedView.java
思路:
找到负责滑动的类,在其对应的函数中,加入日志。
切换成中文,点击Recent 键,进入最近应用界面, 滑动一次,抓取日志。
然后切换成阿拉伯语,执行和上面相同的操作,再一次抓取日志,然后对比日志,看看是否存在差异.
中文日志:
10-01 16:07:19.324 31445 31445 D tang25 : getScrollForPage mPageScrolls == nullfalse----true
10-01 16:07:19.324 31445 31445 D tang25 : computeMaxScroll mIsRtl: true
10-01 16:07:19.324 31445 31445 D tang25 : mDisallowScrollToClearAll: false
10-01 16:07:19.324 31445 31445 D tang25 : computeMaxScroll mTaskViewStartIndex: 0
10-01 16:07:19.324 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.324 31445 31445 D tang25 : updateMinAndMaxScrollX->mMaxScroll:0
10-01 16:07:19.324 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.325 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.325 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.328 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.328 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.332 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.332 31445 31445 D tang25 : computeMaxScroll mIsRtl: true
10-01 16:07:19.332 31445 31445 D tang25 : mDisallowScrollToClearAll: true
10-01 16:07:19.332 31445 31445 D tang25 : computeMaxScroll mTaskViewStartIndex: 0
10-01 16:07:19.332 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.332 31445 31445 D tang25 : updateMinAndMaxScrollX->mMaxScroll:0
10-01 16:07:19.350 31445 31445 D tang25 : getScrollForPage mPageScrolls == nullfalse----true
10-01 16:07:19.350 31445 31445 D tang25 : computeMaxScroll mIsRtl: true
10-01 16:07:19.350 31445 31445 D tang25 : mDisallowScrollToClearAll: false
10-01 16:07:19.350 31445 31445 D tang25 : computeMaxScroll mTaskViewStartIndex: 0
10-01 16:07:19.350 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.350 31445 31445 D tang25 : updateMinAndMaxScrollX->mMaxScroll:0
10-01 16:07:19.372 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.372 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.408 31445 31445 D tang25 : getScrollForPage mPageScrolls == nullfalse----true
10-01 16:07:19.408 31445 31445 D tang25 : computeMaxScroll mIsRtl: true
10-01 16:07:19.408 31445 31445 D tang25 : mDisallowScrollToClearAll: false
10-01 16:07:19.408 31445 31445 D tang25 : computeMaxScroll mTaskViewStartIndex: 0
10-01 16:07:19.408 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.408 31445 31445 D tang25 : updateMinAndMaxScrollX->mMaxScroll:5828
10-01 16:07:19.408 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.408 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.446 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.446 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.460 31445 31445 D tang25 : getScrollForPage mPageScrolls == nullfalse----true
10-01 16:07:19.460 31445 31445 D tang25 : computeMaxScroll mIsRtl: true
10-01 16:07:19.460 31445 31445 D tang25 : mDisallowScrollToClearAll: false
10-01 16:07:19.460 31445 31445 D tang25 : computeMaxScroll mTaskViewStartIndex: 0
10-01 16:07:19.460 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:07:19.460 31445 31445 D tang25 : updateMinAndMaxScrollX->mMaxScroll:5828
阿拉伯语日志:
10-01 16:08:24.982 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:24.982 31445 31445 D tang25 : computeMaxScroll mIsRtl: false
10-01 16:08:24.982 31445 31445 D tang25 : mDisallowScrollToClearAll: false
10-01 16:08:24.982 31445 31445 D tang25 : computeMaxScroll mTaskViewStartIndex: 0
10-01 16:08:24.982 31445 31445 D tang25 : computeMaxScroll final indexOfChild:x2 :1
10-01 16:08:24.982 31445 31445 D tang25 : getScrollForPage mPageScrolls == nullfalse----true
10-01 16:08:24.982 31445 31445 D tang25 : updateMinAndMaxScrollX->mMaxScroll:0
10-01 16:08:24.983 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:24.983 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:24.983 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:24.984 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:24.985 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:24.985 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:24.985 31445 31445 D tang25 : computeMaxScroll mIsRtl: false
10-01 16:08:24.985 31445 31445 D tang25 : mDisallowScrollToClearAll: true
10-01 16:08:24.985 31445 31445 D tang25 : computeMaxScroll mTaskViewStartIndex: 0
10-01 16:08:24.985 31445 31445 D tang25 : computeMaxScroll before indexOfChild x1:0
10-01 16:08:24.985 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:24.985 31445 31445 D tang25 : updateMinAndMaxScrollX->mMaxScroll:0
10-01 16:08:24.988 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:24.988 31445 31445 D tang25 : computeMaxScroll mIsRtl: false
10-01 16:08:24.988 31445 31445 D tang25 : mDisallowScrollToClearAll: false
10-01 16:08:24.988 31445 31445 D tang25 : computeMaxScroll mTaskViewStartIndex: 0
10-01 16:08:24.988 31445 31445 D tang25 : computeMaxScroll final indexOfChild:x2 :1
10-01 16:08:24.988 31445 31445 D tang25 : getScrollForPage mPageScrolls == nullfalse----true
10-01 16:08:24.988 31445 31445 D tang25 : updateMinAndMaxScrollX->mMaxScroll:0
10-01 16:08:25.012 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:25.012 31445 31445 D tang25 : computeMaxScroll mIsRtl: false
10-01 16:08:25.012 31445 31445 D tang25 : mDisallowScrollToClearAll: false
10-01 16:08:25.012 31445 31445 D tang25 : computeMaxScroll mTaskViewStartIndex: 0
10-01 16:08:25.012 31445 31445 D tang25 : computeMaxScroll final indexOfChild:x2 :1
10-01 16:08:25.012 31445 31445 D tang25 : getScrollForPage mPageScrolls == nullfalse----true
10-01 16:08:25.012 31445 31445 D tang25 : updateMinAndMaxScrollX->mMaxScroll:0
10-01 16:08:25.023 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:25.023 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:25.033 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:25.033 31445 31445 D tang25 : computeMaxScroll mIsRtl: false
10-01 16:08:25.033 31445 31445 D tang25 : mDisallowScrollToClearAll: false
10-01 16:08:25.033 31445 31445 D tang25 : computeMaxScroll mTaskViewStartIndex: 0
10-01 16:08:25.033 31445 31445 D tang25 : computeMaxScroll final indexOfChild:x2 :6
10-01 16:08:25.033 31445 31445 D tang25 : getScrollForPage mPageScrolls == nullfalse----true
10-01 16:08:25.033 31445 31445 D tang25 : updateMinAndMaxScrollX->mMaxScroll:0
10-01 16:08:25.033 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
10-01 16:08:25.033 31445 31445 D tang25 : getScrollForPage mPageScrolls index:0
对比日志,发现差异 updateMinAndMaxScrollX->mMaxScroll:0,中文可以滑动,它这个mMaxScroll 不是一直为0的,
找到相应函数,打印退栈,查看调用流程,Log.d(TAG, Log.getStackTraceString(new Throwable()));
at com.android.launcher3.PagedView.getScrollForPage(PagedView.java:1062)
at com.android.quickstep.views.RecentsView.computeMaxScroll(RecentsView.java:2370)
at com.android.launcher3.PagedView.updateMinAndMaxScrollX(PagedView.java:712)
at com.android.launcher3.PagedView.onLayout(PagedView.java:647)
at com.android.quickstep.views.RecentsView.onLayout(RecentsView.java:1879)
at android.view.View.layout(View.java:22905)
at android.view.ViewGroup.layout(ViewGroup.java:6389)
at com.android.quickstep.views.RecentsView.showCurrentTask(RecentsView.java:1240)
at com.android.quickstep.AppToOverviewAnimationProvider.onActivityReady(AppToOverviewAnimationProvider.java:77)
at com.android.quickstep.OverviewCommandHelper$RecentsActivityCommand.onActivityReady(OverviewCommandHelper.java:234)
at com.android.quickstep.OverviewCommandHelper$RecentsActivityCommand.lambda$QLBi40m2HnRcFakJUh6rtde_WJM(Unknown Source:0)
at com.android.quickstep.-$$Lambda$OverviewCommandHelper$RecentsActivityCommand$QLBi40m2HnRcFakJUh6rtde_WJM.test(Unknown Source:4)
at com.android.quickstep.FallbackActivityInterface.lambda$createActivityInitListener$0(FallbackActivityInterface.java:97)
at com.android.quickstep.-$$Lambda$FallbackActivityInterface$5yFo4vs3bnvBoGmsaVSWVYH888g.test(Unknown Source:6)
at com.android.quickstep.util.ActivityInitListener.handleInit(ActivityInitListener.java:56)
at com.android.quickstep.util.ActivityInitListener.init(ActivityInitListener.java:52)
at com.android.launcher3.util.ActivityTracker.handleIntent(ActivityTracker.java:81)
at com.android.launcher3.util.ActivityTracker.handleCreate(ActivityTracker.java:68)
at com.android.quickstep.RecentsActivity.onCreate(RecentsActivity.java:262)
at android.app.Activity.performCreate(Activity.java:7994)
at android.app.Activity.performCreate(Activity.java:7978)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1310)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3405)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3596)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2067)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7705)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:952)
流程 RecentsView.onLayout() -> PagedView.updateMinAndMaxScrollX() -> RecentsView.computeMaxScroll() -> PagedView.getScrollForPage()
RecentsView 继承了PagedView,复现了其computeMaxScroll()函数,切换语言后导致mMaxScroll 为0!
改动
方案:不让其走子类的computeMaxScroll(), 走父类的,强制为mMaxScroll赋值!!!
PagedView.java
protected void updateMinAndMaxScrollX() {
mMinScroll = computeMinScroll();
//add start
if(mIsRtl){
mMaxScroll = computeMaxScroll();
}else {
int childCount = getChildCount();
if (childCount > 0) {
final int index = false ? 0 : childCount - 1;
mMaxScroll = getScrollForPage(index);
} else {
mMaxScroll = 0;
}
}
Log.d("TAG","updateMinAndMaxScrollX->mMaxScroll:"+mMaxScroll);
//add end
}
分类:
Android
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
2022-03-19 RecyclerView 配合布局的简单使用-->悬浮titleBar--文件
2022-03-19 Android-屏幕适配