diff --git a/README-CN.md b/README-CN.md index 19f2605958ddba3f63fed01bb57f03dcaa289064..8b54bd54821a5d7347eaaf364f2f42fd91006a51 100644 --- a/README-CN.md +++ b/README-CN.md @@ -618,7 +618,7 @@ getEntries : 获取压缩文件中的文件对象 Gradle: ``` groovy -compile 'com.blankj:utilcode:1.8.4' +compile 'com.blankj:utilcode:1.8.5' ``` @@ -641,7 +641,7 @@ Utils.init(context); [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png -[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.8.4-brightgreen.svg +[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.8.5-brightgreen.svg [auc]: https://github.com/Blankj/AndroidUtilCode [apisvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/README.md b/README.md index 71b27961bf8f4a6d75f32951cf0fc2c549c3fbba..5f1087a062b0a5702a083504c1bb829abb1eafe1 100644 --- a/README.md +++ b/README.md @@ -618,7 +618,7 @@ getEntries Gradle: ``` groovy -compile 'com.blankj:utilcode:1.8.4' +compile 'com.blankj:utilcode:1.8.5' ``` @@ -641,7 +641,7 @@ Utils.init(context); [logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png -[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.8.4-brightgreen.svg +[aucsvg]: https://img.shields.io/badge/AndroidUtilCode-v1.8.5-brightgreen.svg [auc]: https://github.com/Blankj/AndroidUtilCode [apisvg]: https://img.shields.io/badge/API-14+-brightgreen.svg diff --git a/app/src/main/java/com/blankj/androidutilcode/core/snackbar/SnackbarActivity.java b/app/src/main/java/com/blankj/androidutilcode/core/snackbar/SnackbarActivity.java index 4256571f59e2d0676a3f879427701cf99a319e9a..37bd8ec1782cb04aefbe493391d2312efa11986d 100644 --- a/app/src/main/java/com/blankj/androidutilcode/core/snackbar/SnackbarActivity.java +++ b/app/src/main/java/com/blankj/androidutilcode/core/snackbar/SnackbarActivity.java @@ -26,7 +26,7 @@ import com.blankj.utilcode.util.ToastUtils; */ public class SnackbarActivity extends BaseBackActivity { - private View snackBarRootView; + View snackBarRootView; public static void start(Context context) { Intent starter = new Intent(context, SnackbarActivity.class); diff --git a/app/src/main/java/com/blankj/androidutilcode/core/toast/ToastActivity.java b/app/src/main/java/com/blankj/androidutilcode/core/toast/ToastActivity.java index c69b9739e6facd4d2fd96fc5daf3fa3ca769ecdd..fdb8db8e9e62351cf942f267d4f6e14d2ac4cc04 100644 --- a/app/src/main/java/com/blankj/androidutilcode/core/toast/ToastActivity.java +++ b/app/src/main/java/com/blankj/androidutilcode/core/toast/ToastActivity.java @@ -120,7 +120,7 @@ public class ToastActivity extends BaseBackActivity { } private void resetToast() { - ToastUtils.setMessageColor(0x12000000); + ToastUtils.setMessageColor(0xFFFFFFFF); ToastUtils.setBgResource(-1); ToastUtils.setView(null); ToastUtils.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, getResources().getDimensionPixelSize(R.dimen.offset_64)); diff --git a/build.gradle b/build.gradle index 9a1f063de9d93ff78de9a5a53ffa4768027e67de..767815f5e3a2f8aae415d73356fb8e4c85400f61 100644 --- a/build.gradle +++ b/build.gradle @@ -29,8 +29,8 @@ ext { minSdkVersion = 14 targetSdkVersion = 25 - versionCode = 100800400 - versionName = '1.8.4' + versionCode = 100800500 + versionName = '1.8.5' // App dependencies supportVersion = '25.3.1' diff --git a/settings.gradle b/settings.gradle index a624b0ea4d21cd777349f7707106dd68fa73885e..7e181230c0f874faf3ecd1d9ab861b92c46126cc 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1 +1,3 @@ -include ':app', ':utilcode', ':subutil' +include ':app', + ':utilcode', + ':subutil' diff --git a/update_log.md b/update_log.md index 0d253bd1049e81f7b2dd1063eec600a9b0573e3f..beb79304133cf2866da8efd335511991378c3bbc 100644 --- a/update_log.md +++ b/update_log.md @@ -1,3 +1,4 @@ +* 17/08/30 修复ToastUtils弱引用带来的问题,修复CacheUtils异步问题,发布版本1.8.5 * 17/08/28 修复ToastUtils内存泄露,新增toast可根据系统字体显示不同字体,发布版本1.8.4 * 17/08/20 新增监听Activity生命周期,退出App,发布版本1.8.3 * 17/08/11 LogUtils的Builder改为Config,发布版本1.8.2 diff --git a/utilcode/build.gradle b/utilcode/build.gradle index b59988837c6a90df45de47a6a74cd2701eda5f5d..c9bcfd33d4ab6c895c7e0a792c6e2ed4eadd4b83 100644 --- a/utilcode/build.gradle +++ b/utilcode/build.gradle @@ -37,7 +37,7 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } release { - minifyEnabled true + minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } @@ -63,4 +63,4 @@ dependencies { testCompile "com.google.truth:truth:0.31" } //apply from: "https://raw.githubusercontent.com/xiaopansky/android-library-publish-to-jcenter/master/bintrayUpload.gradle" -//gradlew bintrayUpload +//gradle bintrayUpload diff --git a/utilcode/src/main/java/com/blankj/utilcode/util/CacheUtils.java b/utilcode/src/main/java/com/blankj/utilcode/util/CacheUtils.java index a1b294b4b964c33d174c58a9912ab47dc970dbc6..8703b211f32a29216ffffc96b6581a3b82f6b74a 100644 --- a/utilcode/src/main/java/com/blankj/utilcode/util/CacheUtils.java +++ b/utilcode/src/main/java/com/blankj/utilcode/util/CacheUtils.java @@ -550,6 +550,7 @@ public class CacheUtils { /** * 获取缓存大小 *

单位:字节

+ *

调用了Thread.join(),需异步调用,否则可能主线程会卡顿

* * @return 缓存大小 */ @@ -559,6 +560,7 @@ public class CacheUtils { /** * 获取缓存个数 + *

调用了Thread.join(),需异步调用,否则可能主线程会卡顿

* * @return 缓存个数 */ @@ -591,7 +593,8 @@ public class CacheUtils { private final long sizeLimit; private final int countLimit; private final Map lastUsageDates = Collections.synchronizedMap(new HashMap()); - private final File cacheDir; + private final File cacheDir; + private final Thread mThread; private CacheManager(final File cacheDir, final long sizeLimit, final int countLimit) { this.cacheDir = cacheDir; @@ -599,11 +602,7 @@ public class CacheUtils { this.countLimit = countLimit; cacheSize = new AtomicLong(); cacheCount = new AtomicInteger(); - calculateCacheSizeAndCacheCount(); - } - - private void calculateCacheSizeAndCacheCount() { - new Thread(new Runnable() { + mThread = new Thread(new Runnable() { @Override public void run() { int size = 0; @@ -619,14 +618,25 @@ public class CacheUtils { cacheCount.getAndAdd(count); } } - }).start(); + }); + mThread.start(); } private long getCacheSize() { + try { + mThread.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } return cacheSize.get(); } private int getCacheCount() { + try { + mThread.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } return cacheCount.get(); } diff --git a/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java b/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java index 257bc7cb691dce6f17aeb985da697a508f3a5252..c4e993e2d6eab9d84a657a786ce7a4cc30f55ed9 100644 --- a/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java +++ b/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java @@ -28,7 +28,7 @@ import java.lang.ref.WeakReference; */ public final class SnackbarUtils { - private static final int DEFAULT_COLOR = 0x12000000; + private static final int DEFAULT_COLOR = 0xFEFFFFFF; public static final int LENGTH_INDEFINITE = -2; diff --git a/utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java b/utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java index ec6768cb220c8459dd8b0070997f70279847c1c5..fa8c4ee0c9b9bdd21b8b7eaad627cf581fb88154 100644 --- a/utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java +++ b/utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java @@ -69,7 +69,7 @@ import static android.graphics.BlurMaskFilter.Blur; */ public final class SpanUtils { - private static final int DEFAULT_COLOR = 0x12000000; + private static final int DEFAULT_COLOR = 0xFEFFFFFF; public static final int ALIGN_BOTTOM = 0; public static final int ALIGN_BASELINE = 1; diff --git a/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java b/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java index ee687e07c844f835e0a48ec51f9ac6bfa2c8f1a9..b67c3db43aebe933fd20f0ac5e6df636a739abc4 100644 --- a/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java +++ b/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java @@ -9,10 +9,6 @@ import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.support.annotation.StringRes; import android.support.v4.widget.TextViewCompat; -import android.text.SpannableString; -import android.text.Spanned; -import android.text.style.ForegroundColorSpan; -import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; @@ -31,11 +27,10 @@ import java.lang.ref.WeakReference; */ public final class ToastUtils { - private static final String TAG = "ToastUtils"; - private static final int DEFAULT_COLOR = 0x12000000; - private static final Handler sHandler = new Handler(Looper.getMainLooper()); - private static WeakReference sToastWeakReference; - private static WeakReference sViewWeakReference; + private static final int DEFAULT_COLOR = 0xFEFFFFFF; + private static final Handler HANDLER = new Handler(Looper.getMainLooper()); + private static Toast sToast; + private static WeakReference sViewWeakReference; private static int gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; private static int xOffset = 0; private static int yOffset = (int) (64 * Utils.getApp().getResources().getDisplayMetrics().density + 0.5); @@ -89,9 +84,8 @@ public final class ToastUtils { if (view != null) { return view; } - final Toast toast = getToastFromWR(); - if (toast != null) { - return toast.getView(); + if (sToast != null) { + return sToast.getView(); } return null; } @@ -129,7 +123,7 @@ public final class ToastUtils { * @param text 文本 */ public static void showShortSafe(@NonNull final CharSequence text) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { show(text, Toast.LENGTH_SHORT); @@ -143,7 +137,7 @@ public final class ToastUtils { * @param resId 资源Id */ public static void showShortSafe(@StringRes final int resId) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { show(resId, Toast.LENGTH_SHORT); @@ -158,7 +152,7 @@ public final class ToastUtils { * @param args 参数 */ public static void showShortSafe(@StringRes final int resId, final Object... args) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { show(resId, Toast.LENGTH_SHORT, args); @@ -173,7 +167,7 @@ public final class ToastUtils { * @param args 参数 */ public static void showShortSafe(final String format, final Object... args) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { show(format, Toast.LENGTH_SHORT, args); @@ -187,7 +181,7 @@ public final class ToastUtils { * @param text 文本 */ public static void showLongSafe(@NonNull final CharSequence text) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { show(text, Toast.LENGTH_LONG); @@ -201,7 +195,7 @@ public final class ToastUtils { * @param resId 资源Id */ public static void showLongSafe(@StringRes final int resId) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { show(resId, Toast.LENGTH_LONG); @@ -216,7 +210,7 @@ public final class ToastUtils { * @param args 参数 */ public static void showLongSafe(@StringRes final int resId, final Object... args) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { show(resId, Toast.LENGTH_LONG, args); @@ -231,7 +225,7 @@ public final class ToastUtils { * @param args 参数 */ public static void showLongSafe(final String format, final Object... args) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { show(format, Toast.LENGTH_LONG, args); @@ -319,7 +313,7 @@ public final class ToastUtils { * 安全地显示短时自定义吐司 */ public static void showCustomShortSafe(@LayoutRes final int layoutId) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { setView(layoutId); @@ -332,7 +326,7 @@ public final class ToastUtils { * 安全地显示长时自定义吐司 */ public static void showCustomLongSafe(@LayoutRes final int layoutId) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { setView(layoutId); @@ -361,7 +355,7 @@ public final class ToastUtils { * 安全地显示短时自定义吐司 */ public static void showCustomShortSafe(@NonNull final View view) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { setView(view); @@ -374,7 +368,7 @@ public final class ToastUtils { * 安全地显示长时自定义吐司 */ public static void showCustomLongSafe(@NonNull final View view) { - sHandler.post(new Runnable() { + HANDLER.post(new Runnable() { @Override public void run() { setView(view); @@ -439,55 +433,36 @@ public final class ToastUtils { */ private static void show(final CharSequence text, final int duration) { cancel(); - Toast toast; final View view = getViewFromWR(); if (view != null) { - toast = new Toast(Utils.getApp()); - toast.setView(view); - toast.setDuration(duration); + sToast = new Toast(Utils.getApp()); + sToast.setView(view); + sToast.setDuration(duration); } else { - if (messageColor != DEFAULT_COLOR) { - SpannableString spannableString = new SpannableString(text); - ForegroundColorSpan colorSpan = new ForegroundColorSpan(messageColor); - spannableString.setSpan(colorSpan, 0, spannableString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); - toast = Toast.makeText(Utils.getApp(), spannableString, duration); - } else { - toast = Toast.makeText(Utils.getApp(), text, duration); - } + sToast = Toast.makeText(Utils.getApp(), text, duration); // solve the font of toast - TextViewCompat.setTextAppearance((TextView) toast.getView().findViewById(android.R.id.message), android.R.style.TextAppearance); + TextView tvMessage = (TextView) sToast.getView().findViewById(android.R.id.message); + TextViewCompat.setTextAppearance(tvMessage, android.R.style.TextAppearance); + tvMessage.setTextColor(messageColor); } - View toastView = toast.getView(); + View toastView = sToast.getView(); if (bgResource != -1) { toastView.setBackgroundResource(bgResource); } else if (backgroundColor != DEFAULT_COLOR) { toastView.setBackgroundColor(backgroundColor); } - toast.setGravity(gravity, xOffset, yOffset); - sToastWeakReference = new WeakReference<>(toast); - toast.show(); + sToast.setGravity(gravity, xOffset, yOffset); + sToast.show(); } /** * 取消吐司显示 */ public static void cancel() { - Toast toast = getToastFromWR(); - if (toast != null) { - toast.cancel(); - } - sToastWeakReference = null; - } - - private static Toast getToastFromWR() { - if (sToastWeakReference != null) { - final Toast toast = sToastWeakReference.get(); - if (toast != null) { - return toast; - } + if (sToast != null) { + sToast.cancel(); + sToast = null; } - Log.e(TAG, "getToastFromWR: ", new NullPointerException("Toast is null")); - return null; } private static View getViewFromWR() { @@ -497,7 +472,6 @@ public final class ToastUtils { return view; } } - Log.e(TAG, "getViewFromWR: ", new NullPointerException("The custom view of toast is null")); return null; } } diff --git a/utilcode/src/main/java/com/blankj/utilcode/util/Utils.java b/utilcode/src/main/java/com/blankj/utilcode/util/Utils.java index fe36607cfe07f0eb327bfcbd42ab85681ae76b11..b194d71cd27082aa03791720da6c369d64911c04 100644 --- a/utilcode/src/main/java/com/blankj/utilcode/util/Utils.java +++ b/utilcode/src/main/java/com/blankj/utilcode/util/Utils.java @@ -61,6 +61,7 @@ public final class Utils { @Override public void onActivityDestroyed(Activity activity) { sActivityList.remove(activity); + ToastUtils.cancel(); } }; diff --git a/utilcode/src/test/java/com/blankj/utilcode/util/CacheUtilsTest.java b/utilcode/src/test/java/com/blankj/utilcode/util/CacheUtilsTest.java index 8dad56b9450c4e2ef0166f31699e91fb26da94b0..ae0a840614dab27cafcd2d120a9dd8700b15f1f0 100644 --- a/utilcode/src/test/java/com/blankj/utilcode/util/CacheUtilsTest.java +++ b/utilcode/src/test/java/com/blankj/utilcode/util/CacheUtilsTest.java @@ -319,7 +319,9 @@ public class CacheUtilsTest { } static class SerializableTest implements Serializable { - private static final long serialVersionUID = -8021039743766780051L; + + private static final long serialVersionUID = -5806706668736895024L; + String author; String className;