diff --git a/core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java b/core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java index 37a5a63265e8d..0d16cc49ea3cf 100644 --- a/core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java +++ b/core/java/com/android/internal/app/AppPredictionServiceResolverComparator.java @@ -128,9 +128,8 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator mResolverRankerService.compute(targets); } else { Log.i(TAG, "AppPredictionService response received"); - Message msg = - Message.obtain(mHandler, RANKER_SERVICE_RESULT, sortedAppTargets); - msg.sendToTarget(); + // Skip sending to Handler which takes extra time to dispatch messages. + handleResult(sortedAppTargets); } } ); @@ -141,23 +140,35 @@ class AppPredictionServiceResolverComparator extends AbstractResolverComparator // Null value is okay if we have defaulted to the ResolverRankerService. if (msg.what == RANKER_SERVICE_RESULT && msg.obj != null) { final List sortedAppTargets = (List) msg.obj; - if (checkAppTargetRankValid(sortedAppTargets)) { - sortedAppTargets.forEach(target -> mTargetScores.put( - new ComponentName(target.getPackageName(), target.getClassName()), - target.getRank())); - } - for (int i = 0; i < sortedAppTargets.size(); i++) { - ComponentName componentName = new ComponentName( - sortedAppTargets.get(i).getPackageName(), - sortedAppTargets.get(i).getClassName()); - mTargetRanks.put(componentName, i); - Log.i(TAG, "handleResultMessage, sortedAppTargets #" + i + ": " + componentName); - } + handleSortedAppTargets(sortedAppTargets); } else if (msg.obj == null && mResolverRankerService == null) { Log.e(TAG, "Unexpected null result"); } } + private void handleResult(List sortedAppTargets) { + if (mHandler.hasMessages(RANKER_RESULT_TIMEOUT)) { + handleSortedAppTargets(sortedAppTargets); + mHandler.removeMessages(RANKER_RESULT_TIMEOUT); + afterCompute(); + } + } + + private void handleSortedAppTargets(List sortedAppTargets) { + if (checkAppTargetRankValid(sortedAppTargets)) { + sortedAppTargets.forEach(target -> mTargetScores.put( + new ComponentName(target.getPackageName(), target.getClassName()), + target.getRank())); + } + for (int i = 0; i < sortedAppTargets.size(); i++) { + ComponentName componentName = new ComponentName( + sortedAppTargets.get(i).getPackageName(), + sortedAppTargets.get(i).getClassName()); + mTargetRanks.put(componentName, i); + Log.i(TAG, "handleSortedAppTargets, sortedAppTargets #" + i + ": " + componentName); + } + } + private boolean checkAppTargetRankValid(List sortedAppTargets) { for (AppTarget target : sortedAppTargets) { if (target.getRank() != 0) {