Fix potential NPE when ActivityClientRecord is null

From user bugreport and base on Android R code

12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: FATAL EXCEPTION: main
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: Process: com.kuaishou.nebula, PID: 2525
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.app.ActivityThread$ActivityClientRecord.getLifecycleState()' on a null object>
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: at android.app.servertransaction.TransactionExecutorHelper.getClosestOfStates(TransactionExecutorHelper.java:166)
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: at android.app.servertransaction.TransactionExecutorHelper.getClosestPreExecutionState(TransactionExecutorHelper.java:144)
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:129)
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
12-02 11:52:09.533 10148  2525  2525 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2105)

Bug: 262605168
Test: NA

Change-Id: I9613ddd569d6b3d0617b401c73a4f5b92cd95e2e
Signed-off-by: lihaizhou <lihaizhou@coolpad.com>
This commit is contained in:
lihaizhou
2022-12-09 12:48:43 +08:00
parent 140a69e94f
commit 2fbbef3783

View File

@@ -31,6 +31,7 @@ import android.app.ActivityThread.ActivityClientRecord;
import android.app.ClientTransactionHandler;
import android.os.IBinder;
import android.util.IntArray;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
@@ -43,6 +44,7 @@ import java.util.List;
* @hide
*/
public class TransactionExecutorHelper {
private static final String TAG = TransactionExecutorHelper.class.getSimpleName();
// A penalty applied to path with destruction when looking for the shortest one.
private static final int DESTRUCTION_PENALTY = 10;
@@ -162,6 +164,11 @@ public class TransactionExecutorHelper {
if (finalStates == null || finalStates.length == 0) {
return UNDEFINED;
}
if (r == null) {
// Early return because the ActivityClientRecord hasn't been created or cannot be found.
Log.w(TAG, "ActivityClientRecord was null");
return UNDEFINED;
}
final int currentState = r.getLifecycleState();
int closestState = UNDEFINED;