Skip to content

Commit 402e734

Browse files
committed
see 03/09 log
1 parent d9ec61a commit 402e734

File tree

6 files changed

+59
-45
lines changed

6 files changed

+59
-45
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ dependencies {
5656
// LeakCanary
5757
debugImplementation "com.squareup.leakcanary:leakcanary-android:$leakcanary_version"
5858
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version"
59-
// implementation 'com.blankj:utilcode:1.13.1'
59+
// implementation 'com.blankj:utilcode:1.13.2'
6060
}
6161

6262

utilcode/src/main/java/com/blankj/utilcode/util/ActivityUtils.java

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -701,7 +701,7 @@ public static void startHomeActivity() {
701701
* @return the list of activity
702702
*/
703703
public static List<Activity> getActivityList() {
704-
return Utils.sActivityList;
704+
return Utils.getActivityList();
705705
}
706706

707707
/**
@@ -739,11 +739,9 @@ public static String getLauncherActivity(@NonNull final String pkg) {
739739
* @return the top activity in activity's stack
740740
*/
741741
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;
747745
}
748746
// using reflect to get top activity
749747
try {
@@ -761,9 +759,9 @@ public static Activity getTopActivity() {
761759
if (!pausedField.getBoolean(activityRecord)) {
762760
Field activityField = activityRecordClass.getDeclaredField("activity");
763761
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;
767765
}
768766
}
769767
} catch (ClassNotFoundException e) {
@@ -777,7 +775,7 @@ public static Activity getTopActivity() {
777775
} catch (NoSuchFieldException e) {
778776
e.printStackTrace();
779777
}
780-
throw new NullPointerException("The top activity is null.");
778+
return null;
781779
}
782780

783781
/**
@@ -787,7 +785,7 @@ public static Activity getTopActivity() {
787785
* @return {@code true}: yes<br>{@code false}: no
788786
*/
789787
public static boolean isActivityExistsInStack(@NonNull final Activity activity) {
790-
List<Activity> activities = Utils.sActivityList;
788+
List<Activity> activities = Utils.getActivityList();
791789
for (Activity aActivity : activities) {
792790
if (aActivity.equals(activity)) {
793791
return true;
@@ -803,7 +801,7 @@ public static boolean isActivityExistsInStack(@NonNull final Activity activity)
803801
* @return {@code true}: yes<br>{@code false}: no
804802
*/
805803
public static boolean isActivityExistsInStack(@NonNull final Class<?> clz) {
806-
List<Activity> activities = Utils.sActivityList;
804+
List<Activity> activities = Utils.getActivityList();
807805
for (Activity aActivity : activities) {
808806
if (aActivity.getClass().equals(clz)) {
809807
return true;
@@ -866,7 +864,7 @@ public static void finishActivity(@NonNull final Class<?> clz) {
866864
* @param isLoadAnim True to use animation for the outgoing activity, false otherwise.
867865
*/
868866
public static void finishActivity(@NonNull final Class<?> clz, final boolean isLoadAnim) {
869-
List<Activity> activities = Utils.sActivityList;
867+
List<Activity> activities = Utils.getActivityList();
870868
for (Activity activity : activities) {
871869
if (activity.getClass().equals(clz)) {
872870
activity.finish();
@@ -889,7 +887,7 @@ public static void finishActivity(@NonNull final Class<?> clz, final boolean isL
889887
public static void finishActivity(@NonNull final Class<?> clz,
890888
@AnimRes final int enterAnim,
891889
@AnimRes final int exitAnim) {
892-
List<Activity> activities = Utils.sActivityList;
890+
List<Activity> activities = Utils.getActivityList();
893891
for (Activity activity : activities) {
894892
if (activity.getClass().equals(clz)) {
895893
activity.finish();
@@ -919,7 +917,7 @@ public static boolean finishToActivity(@NonNull final Activity activity,
919917
public static boolean finishToActivity(@NonNull final Activity activity,
920918
final boolean isIncludeSelf,
921919
final boolean isLoadAnim) {
922-
List<Activity> activities = Utils.sActivityList;
920+
List<Activity> activities = Utils.getActivityList();
923921
for (int i = activities.size() - 1; i >= 0; --i) {
924922
Activity aActivity = activities.get(i);
925923
if (aActivity.equals(activity)) {
@@ -947,7 +945,7 @@ public static boolean finishToActivity(@NonNull final Activity activity,
947945
final boolean isIncludeSelf,
948946
@AnimRes final int enterAnim,
949947
@AnimRes final int exitAnim) {
950-
List<Activity> activities = Utils.sActivityList;
948+
List<Activity> activities = Utils.getActivityList();
951949
for (int i = activities.size() - 1; i >= 0; --i) {
952950
Activity aActivity = activities.get(i);
953951
if (aActivity.equals(activity)) {
@@ -982,7 +980,7 @@ public static boolean finishToActivity(@NonNull final Class<?> clz,
982980
public static boolean finishToActivity(@NonNull final Class<?> clz,
983981
final boolean isIncludeSelf,
984982
final boolean isLoadAnim) {
985-
List<Activity> activities = Utils.sActivityList;
983+
List<Activity> activities = Utils.getActivityList();
986984
for (int i = activities.size() - 1; i >= 0; --i) {
987985
Activity aActivity = activities.get(i);
988986
if (aActivity.getClass().equals(clz)) {
@@ -1010,7 +1008,7 @@ public static boolean finishToActivity(@NonNull final Class<?> clz,
10101008
final boolean isIncludeSelf,
10111009
@AnimRes final int enterAnim,
10121010
@AnimRes final int exitAnim) {
1013-
List<Activity> activities = Utils.sActivityList;
1011+
List<Activity> activities = Utils.getActivityList();
10141012
for (int i = activities.size() - 1; i >= 0; --i) {
10151013
Activity aActivity = activities.get(i);
10161014
if (aActivity.getClass().equals(clz)) {
@@ -1042,7 +1040,7 @@ public static void finishOtherActivities(@NonNull final Class<?> clz) {
10421040
*/
10431041
public static void finishOtherActivities(@NonNull final Class<?> clz,
10441042
final boolean isLoadAnim) {
1045-
List<Activity> activities = Utils.sActivityList;
1043+
List<Activity> activities = Utils.getActivityList();
10461044
for (int i = activities.size() - 1; i >= 0; i--) {
10471045
Activity activity = activities.get(i);
10481046
if (!activity.getClass().equals(clz)) {
@@ -1063,7 +1061,7 @@ public static void finishOtherActivities(@NonNull final Class<?> clz,
10631061
public static void finishOtherActivities(@NonNull final Class<?> clz,
10641062
@AnimRes final int enterAnim,
10651063
@AnimRes final int exitAnim) {
1066-
List<Activity> activities = Utils.sActivityList;
1064+
List<Activity> activities = Utils.getActivityList();
10671065
for (int i = activities.size() - 1; i >= 0; i--) {
10681066
Activity activity = activities.get(i);
10691067
if (!activity.getClass().equals(clz)) {
@@ -1085,7 +1083,7 @@ public static void finishAllActivities() {
10851083
* @param isLoadAnim True to use animation for the outgoing activity, false otherwise.
10861084
*/
10871085
public static void finishAllActivities(final boolean isLoadAnim) {
1088-
List<Activity> activityList = Utils.sActivityList;
1086+
List<Activity> activityList = Utils.getActivityList();
10891087
for (int i = activityList.size() - 1; i >= 0; --i) {// remove from top
10901088
Activity activity = activityList.get(i);
10911089
// sActivityList remove the index activity at onActivityDestroyed
@@ -1106,7 +1104,7 @@ public static void finishAllActivities(final boolean isLoadAnim) {
11061104
*/
11071105
public static void finishAllActivities(@AnimRes final int enterAnim,
11081106
@AnimRes final int exitAnim) {
1109-
List<Activity> activityList = Utils.sActivityList;
1107+
List<Activity> activityList = Utils.getActivityList();
11101108
for (int i = activityList.size() - 1; i >= 0; --i) {// remove from top
11111109
Activity activity = activityList.get(i);
11121110
// sActivityList remove the index activity at onActivityDestroyed
@@ -1128,7 +1126,7 @@ public static void finishAllActivitiesExceptNewest() {
11281126
* @param isLoadAnim True to use animation for the outgoing activity, false otherwise.
11291127
*/
11301128
public static void finishAllActivitiesExceptNewest(final boolean isLoadAnim) {
1131-
List<Activity> activities = Utils.sActivityList;
1129+
List<Activity> activities = Utils.getActivityList();
11321130
for (int i = activities.size() - 2; i >= 0; i--) {
11331131
finishActivity(activities.get(i), isLoadAnim);
11341132
}
@@ -1144,7 +1142,7 @@ public static void finishAllActivitiesExceptNewest(final boolean isLoadAnim) {
11441142
*/
11451143
public static void finishAllActivitiesExceptNewest(@AnimRes final int enterAnim,
11461144
@AnimRes final int exitAnim) {
1147-
List<Activity> activities = Utils.sActivityList;
1145+
List<Activity> activities = Utils.getActivityList();
11481146
for (int i = activities.size() - 2; i >= 0; i--) {
11491147
finishActivity(activities.get(i), enterAnim, exitAnim);
11501148
}

utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,10 @@ public static boolean isAppSystem(final String packageName) {
304304
* @return {@code true}: yes<br>{@code false}: no
305305
*/
306306
public static boolean isAppForeground() {
307-
ActivityManager manager =
307+
ActivityManager am =
308308
(ActivityManager) Utils.getApp().getSystemService(Context.ACTIVITY_SERVICE);
309-
List<ActivityManager.RunningAppProcessInfo> info = manager.getRunningAppProcesses();
309+
if (am == null) return false;
310+
List<ActivityManager.RunningAppProcessInfo> info = am.getRunningAppProcesses();
310311
if (info == null || info.size() == 0) return false;
311312
for (ActivityManager.RunningAppProcessInfo aInfo : info) {
312313
if (aInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
@@ -376,7 +377,7 @@ public static void launchAppDetailsSettings(final String packageName) {
376377
* Exit the application.
377378
*/
378379
public static void exitApp() {
379-
List<Activity> activityList = Utils.sActivityList;
380+
List<Activity> activityList = Utils.getActivityList();
380381
for (int i = activityList.size() - 1; i >= 0; --i) {// remove from top
381382
Activity activity = activityList.get(i);
382383
// sActivityList remove the index activity at onActivityDestroyed

utilcode/src/main/java/com/blankj/utilcode/util/ProcessUtils.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ private ProcessUtils() {
4444
* @return the foreground process name
4545
*/
4646
public static String getForegroundProcessName() {
47-
ActivityManager manager =
47+
ActivityManager am =
4848
(ActivityManager) Utils.getApp().getSystemService(Context.ACTIVITY_SERVICE);
49-
if (manager == null) return null;
50-
List<ActivityManager.RunningAppProcessInfo> pInfo = manager.getRunningAppProcesses();
49+
if (am == null) return null;
50+
List<ActivityManager.RunningAppProcessInfo> pInfo = am.getRunningAppProcesses();
5151
if (pInfo != null && pInfo.size() > 0) {
5252
for (ActivityManager.RunningAppProcessInfo aInfo : pInfo) {
5353
if (aInfo.importance
@@ -57,10 +57,10 @@ public static String getForegroundProcessName() {
5757
}
5858
}
5959
if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.LOLLIPOP) {
60-
PackageManager packageManager = Utils.getApp().getPackageManager();
60+
PackageManager pm = Utils.getApp().getPackageManager();
6161
Intent intent = new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS);
6262
List<ResolveInfo> list =
63-
packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
63+
pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
6464
Log.i("ProcessUtils", list.toString());
6565
if (list.size() <= 0) {
6666
Log.i("ProcessUtils",
@@ -69,7 +69,7 @@ public static String getForegroundProcessName() {
6969
}
7070
try {// 有"有权查看使用权限的应用"选项
7171
ApplicationInfo info =
72-
packageManager.getApplicationInfo(Utils.getApp().getPackageName(), 0);
72+
pm.getApplicationInfo(Utils.getApp().getPackageName(), 0);
7373
AppOpsManager aom =
7474
(AppOpsManager) Utils.getApp().getSystemService(Context.APP_OPS_SERVICE);
7575
if (aom != null) {

utilcode/src/main/java/com/blankj/utilcode/util/ServiceUtils.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,16 @@ public static void unbindService(final ServiceConnection conn) {
150150
Utils.getApp().unbindService(conn);
151151
}
152152

153+
/**
154+
* Return whether service is running.
155+
*
156+
* @param cls The service class.
157+
* @return {@code true}: yes<br>{@code false}: no
158+
*/
159+
public static boolean isServiceRunning(final Class<?> cls) {
160+
return isServiceRunning(cls.getName());
161+
}
162+
153163
/**
154164
* Return whether service is running.
155165
*

utilcode/src/main/java/com/blankj/utilcode/util/Utils.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88
import android.os.Bundle;
99
import android.support.annotation.NonNull;
1010

11-
import java.lang.ref.WeakReference;
1211
import java.util.LinkedList;
13-
import java.util.List;
1412

1513
/**
1614
* <pre>
@@ -36,24 +34,22 @@ public final class Utils {
3634
@SuppressLint("StaticFieldLeak")
3735
private static Application sApplication;
3836

39-
static WeakReference<Activity> sTopActivityWeakRef;
40-
static List<Activity> sActivityList = new LinkedList<>();
37+
static LinkedList<Activity> sActivityList = new LinkedList<>();
4138

4239
private static ActivityLifecycleCallbacks mCallbacks = new ActivityLifecycleCallbacks() {
4340
@Override
4441
public void onActivityCreated(Activity activity, Bundle bundle) {
45-
sActivityList.add(activity);
46-
setTopActivityWeakRef(activity);
42+
setTopActivity(activity);
4743
}
4844

4945
@Override
5046
public void onActivityStarted(Activity activity) {
51-
setTopActivityWeakRef(activity);
47+
setTopActivity(activity);
5248
}
5349

5450
@Override
5551
public void onActivityResumed(Activity activity) {
56-
setTopActivityWeakRef(activity);
52+
setTopActivity(activity);
5753
}
5854

5955
@Override
@@ -102,10 +98,19 @@ public static Application getApp() {
10298
throw new NullPointerException("u should init first");
10399
}
104100

105-
static void setTopActivityWeakRef(final Activity activity) {
101+
static void setTopActivity(final Activity activity) {
106102
if (activity.getClass() == PermissionUtils.PermissionActivity.class) return;
107-
if (sTopActivityWeakRef == null || !activity.equals(sTopActivityWeakRef.get())) {
108-
sTopActivityWeakRef = new WeakReference<>(activity);
103+
if (sActivityList.contains(activity)) {
104+
if (!sActivityList.getLast().equals(activity)) {
105+
sActivityList.remove(activity);
106+
sActivityList.addLast(activity);
107+
}
108+
} else {
109+
sActivityList.addLast(activity);
109110
}
110111
}
112+
113+
public static LinkedList<Activity> getActivityList() {
114+
return sActivityList;
115+
}
111116
}

0 commit comments

Comments
 (0)