@@ -701,7 +701,7 @@ public static void startHomeActivity() {
701
701
* @return the list of activity
702
702
*/
703
703
public static List <Activity > getActivityList () {
704
- return Utils .sActivityList ;
704
+ return Utils .getActivityList () ;
705
705
}
706
706
707
707
/**
@@ -739,11 +739,9 @@ public static String getLauncherActivity(@NonNull final String pkg) {
739
739
* @return the top activity in activity's stack
740
740
*/
741
741
public static Activity getTopActivity () {
742
- if (Utils .sTopActivityWeakRef != null ) {
743
- final Activity activity = Utils .sTopActivityWeakRef .get ();
744
- if (activity != null ) {
745
- return activity ;
746
- }
742
+ final Activity topActivity = Utils .getActivityList ().getLast ();
743
+ if (topActivity != null ) {
744
+ return topActivity ;
747
745
}
748
746
// using reflect to get top activity
749
747
try {
@@ -761,9 +759,9 @@ public static Activity getTopActivity() {
761
759
if (!pausedField .getBoolean (activityRecord )) {
762
760
Field activityField = activityRecordClass .getDeclaredField ("activity" );
763
761
activityField .setAccessible (true );
764
- Activity topActivity = (Activity ) activityField .get (activityRecord );
765
- Utils .setTopActivityWeakRef ( topActivity );
766
- return topActivity ;
762
+ Activity activity = (Activity ) activityField .get (activityRecord );
763
+ Utils .setTopActivity ( activity );
764
+ return activity ;
767
765
}
768
766
}
769
767
} catch (ClassNotFoundException e ) {
@@ -777,7 +775,7 @@ public static Activity getTopActivity() {
777
775
} catch (NoSuchFieldException e ) {
778
776
e .printStackTrace ();
779
777
}
780
- throw new NullPointerException ( "The top activity is null." ) ;
778
+ return null ;
781
779
}
782
780
783
781
/**
@@ -787,7 +785,7 @@ public static Activity getTopActivity() {
787
785
* @return {@code true}: yes<br>{@code false}: no
788
786
*/
789
787
public static boolean isActivityExistsInStack (@ NonNull final Activity activity ) {
790
- List <Activity > activities = Utils .sActivityList ;
788
+ List <Activity > activities = Utils .getActivityList () ;
791
789
for (Activity aActivity : activities ) {
792
790
if (aActivity .equals (activity )) {
793
791
return true ;
@@ -803,7 +801,7 @@ public static boolean isActivityExistsInStack(@NonNull final Activity activity)
803
801
* @return {@code true}: yes<br>{@code false}: no
804
802
*/
805
803
public static boolean isActivityExistsInStack (@ NonNull final Class <?> clz ) {
806
- List <Activity > activities = Utils .sActivityList ;
804
+ List <Activity > activities = Utils .getActivityList () ;
807
805
for (Activity aActivity : activities ) {
808
806
if (aActivity .getClass ().equals (clz )) {
809
807
return true ;
@@ -866,7 +864,7 @@ public static void finishActivity(@NonNull final Class<?> clz) {
866
864
* @param isLoadAnim True to use animation for the outgoing activity, false otherwise.
867
865
*/
868
866
public static void finishActivity (@ NonNull final Class <?> clz , final boolean isLoadAnim ) {
869
- List <Activity > activities = Utils .sActivityList ;
867
+ List <Activity > activities = Utils .getActivityList () ;
870
868
for (Activity activity : activities ) {
871
869
if (activity .getClass ().equals (clz )) {
872
870
activity .finish ();
@@ -889,7 +887,7 @@ public static void finishActivity(@NonNull final Class<?> clz, final boolean isL
889
887
public static void finishActivity (@ NonNull final Class <?> clz ,
890
888
@ AnimRes final int enterAnim ,
891
889
@ AnimRes final int exitAnim ) {
892
- List <Activity > activities = Utils .sActivityList ;
890
+ List <Activity > activities = Utils .getActivityList () ;
893
891
for (Activity activity : activities ) {
894
892
if (activity .getClass ().equals (clz )) {
895
893
activity .finish ();
@@ -919,7 +917,7 @@ public static boolean finishToActivity(@NonNull final Activity activity,
919
917
public static boolean finishToActivity (@ NonNull final Activity activity ,
920
918
final boolean isIncludeSelf ,
921
919
final boolean isLoadAnim ) {
922
- List <Activity > activities = Utils .sActivityList ;
920
+ List <Activity > activities = Utils .getActivityList () ;
923
921
for (int i = activities .size () - 1 ; i >= 0 ; --i ) {
924
922
Activity aActivity = activities .get (i );
925
923
if (aActivity .equals (activity )) {
@@ -947,7 +945,7 @@ public static boolean finishToActivity(@NonNull final Activity activity,
947
945
final boolean isIncludeSelf ,
948
946
@ AnimRes final int enterAnim ,
949
947
@ AnimRes final int exitAnim ) {
950
- List <Activity > activities = Utils .sActivityList ;
948
+ List <Activity > activities = Utils .getActivityList () ;
951
949
for (int i = activities .size () - 1 ; i >= 0 ; --i ) {
952
950
Activity aActivity = activities .get (i );
953
951
if (aActivity .equals (activity )) {
@@ -982,7 +980,7 @@ public static boolean finishToActivity(@NonNull final Class<?> clz,
982
980
public static boolean finishToActivity (@ NonNull final Class <?> clz ,
983
981
final boolean isIncludeSelf ,
984
982
final boolean isLoadAnim ) {
985
- List <Activity > activities = Utils .sActivityList ;
983
+ List <Activity > activities = Utils .getActivityList () ;
986
984
for (int i = activities .size () - 1 ; i >= 0 ; --i ) {
987
985
Activity aActivity = activities .get (i );
988
986
if (aActivity .getClass ().equals (clz )) {
@@ -1010,7 +1008,7 @@ public static boolean finishToActivity(@NonNull final Class<?> clz,
1010
1008
final boolean isIncludeSelf ,
1011
1009
@ AnimRes final int enterAnim ,
1012
1010
@ AnimRes final int exitAnim ) {
1013
- List <Activity > activities = Utils .sActivityList ;
1011
+ List <Activity > activities = Utils .getActivityList () ;
1014
1012
for (int i = activities .size () - 1 ; i >= 0 ; --i ) {
1015
1013
Activity aActivity = activities .get (i );
1016
1014
if (aActivity .getClass ().equals (clz )) {
@@ -1042,7 +1040,7 @@ public static void finishOtherActivities(@NonNull final Class<?> clz) {
1042
1040
*/
1043
1041
public static void finishOtherActivities (@ NonNull final Class <?> clz ,
1044
1042
final boolean isLoadAnim ) {
1045
- List <Activity > activities = Utils .sActivityList ;
1043
+ List <Activity > activities = Utils .getActivityList () ;
1046
1044
for (int i = activities .size () - 1 ; i >= 0 ; i --) {
1047
1045
Activity activity = activities .get (i );
1048
1046
if (!activity .getClass ().equals (clz )) {
@@ -1063,7 +1061,7 @@ public static void finishOtherActivities(@NonNull final Class<?> clz,
1063
1061
public static void finishOtherActivities (@ NonNull final Class <?> clz ,
1064
1062
@ AnimRes final int enterAnim ,
1065
1063
@ AnimRes final int exitAnim ) {
1066
- List <Activity > activities = Utils .sActivityList ;
1064
+ List <Activity > activities = Utils .getActivityList () ;
1067
1065
for (int i = activities .size () - 1 ; i >= 0 ; i --) {
1068
1066
Activity activity = activities .get (i );
1069
1067
if (!activity .getClass ().equals (clz )) {
@@ -1085,7 +1083,7 @@ public static void finishAllActivities() {
1085
1083
* @param isLoadAnim True to use animation for the outgoing activity, false otherwise.
1086
1084
*/
1087
1085
public static void finishAllActivities (final boolean isLoadAnim ) {
1088
- List <Activity > activityList = Utils .sActivityList ;
1086
+ List <Activity > activityList = Utils .getActivityList () ;
1089
1087
for (int i = activityList .size () - 1 ; i >= 0 ; --i ) {// remove from top
1090
1088
Activity activity = activityList .get (i );
1091
1089
// sActivityList remove the index activity at onActivityDestroyed
@@ -1106,7 +1104,7 @@ public static void finishAllActivities(final boolean isLoadAnim) {
1106
1104
*/
1107
1105
public static void finishAllActivities (@ AnimRes final int enterAnim ,
1108
1106
@ AnimRes final int exitAnim ) {
1109
- List <Activity > activityList = Utils .sActivityList ;
1107
+ List <Activity > activityList = Utils .getActivityList () ;
1110
1108
for (int i = activityList .size () - 1 ; i >= 0 ; --i ) {// remove from top
1111
1109
Activity activity = activityList .get (i );
1112
1110
// sActivityList remove the index activity at onActivityDestroyed
@@ -1128,7 +1126,7 @@ public static void finishAllActivitiesExceptNewest() {
1128
1126
* @param isLoadAnim True to use animation for the outgoing activity, false otherwise.
1129
1127
*/
1130
1128
public static void finishAllActivitiesExceptNewest (final boolean isLoadAnim ) {
1131
- List <Activity > activities = Utils .sActivityList ;
1129
+ List <Activity > activities = Utils .getActivityList () ;
1132
1130
for (int i = activities .size () - 2 ; i >= 0 ; i --) {
1133
1131
finishActivity (activities .get (i ), isLoadAnim );
1134
1132
}
@@ -1144,7 +1142,7 @@ public static void finishAllActivitiesExceptNewest(final boolean isLoadAnim) {
1144
1142
*/
1145
1143
public static void finishAllActivitiesExceptNewest (@ AnimRes final int enterAnim ,
1146
1144
@ AnimRes final int exitAnim ) {
1147
- List <Activity > activities = Utils .sActivityList ;
1145
+ List <Activity > activities = Utils .getActivityList () ;
1148
1146
for (int i = activities .size () - 2 ; i >= 0 ; i --) {
1149
1147
finishActivity (activities .get (i ), enterAnim , exitAnim );
1150
1148
}
0 commit comments