提交 7068e6cc 编写于 作者: B Blankj

see 08/30 log

上级 c54c4f81
...@@ -618,7 +618,7 @@ getEntries : 获取压缩文件中的文件对象 ...@@ -618,7 +618,7 @@ getEntries : 获取压缩文件中的文件对象
Gradle: Gradle:
``` groovy ``` groovy
compile 'com.blankj:utilcode:1.8.4' compile 'com.blankj:utilcode:1.8.5'
``` ```
...@@ -641,7 +641,7 @@ Utils.init(context); ...@@ -641,7 +641,7 @@ Utils.init(context);
[logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png [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 [auc]: https://github.com/Blankj/AndroidUtilCode
[apisvg]: https://img.shields.io/badge/API-14+-brightgreen.svg [apisvg]: https://img.shields.io/badge/API-14+-brightgreen.svg
......
...@@ -618,7 +618,7 @@ getEntries ...@@ -618,7 +618,7 @@ getEntries
Gradle: Gradle:
``` groovy ``` groovy
compile 'com.blankj:utilcode:1.8.4' compile 'com.blankj:utilcode:1.8.5'
``` ```
...@@ -641,7 +641,7 @@ Utils.init(context); ...@@ -641,7 +641,7 @@ Utils.init(context);
[logo]: https://raw.githubusercontent.com/Blankj/AndroidUtilCode/master/art/logo.png [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 [auc]: https://github.com/Blankj/AndroidUtilCode
[apisvg]: https://img.shields.io/badge/API-14+-brightgreen.svg [apisvg]: https://img.shields.io/badge/API-14+-brightgreen.svg
......
...@@ -26,7 +26,7 @@ import com.blankj.utilcode.util.ToastUtils; ...@@ -26,7 +26,7 @@ import com.blankj.utilcode.util.ToastUtils;
*/ */
public class SnackbarActivity extends BaseBackActivity { public class SnackbarActivity extends BaseBackActivity {
private View snackBarRootView; View snackBarRootView;
public static void start(Context context) { public static void start(Context context) {
Intent starter = new Intent(context, SnackbarActivity.class); Intent starter = new Intent(context, SnackbarActivity.class);
......
...@@ -120,7 +120,7 @@ public class ToastActivity extends BaseBackActivity { ...@@ -120,7 +120,7 @@ public class ToastActivity extends BaseBackActivity {
} }
private void resetToast() { private void resetToast() {
ToastUtils.setMessageColor(0x12000000); ToastUtils.setMessageColor(0xFFFFFFFF);
ToastUtils.setBgResource(-1); ToastUtils.setBgResource(-1);
ToastUtils.setView(null); ToastUtils.setView(null);
ToastUtils.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, getResources().getDimensionPixelSize(R.dimen.offset_64)); ToastUtils.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, getResources().getDimensionPixelSize(R.dimen.offset_64));
......
...@@ -29,8 +29,8 @@ ext { ...@@ -29,8 +29,8 @@ ext {
minSdkVersion = 14 minSdkVersion = 14
targetSdkVersion = 25 targetSdkVersion = 25
versionCode = 100800400 versionCode = 100800500
versionName = '1.8.4' versionName = '1.8.5'
// App dependencies // App dependencies
supportVersion = '25.3.1' supportVersion = '25.3.1'
......
include ':app', ':utilcode', ':subutil' include ':app',
':utilcode',
':subutil'
* 17/08/30 修复ToastUtils弱引用带来的问题,修复CacheUtils异步问题,发布版本1.8.5
* 17/08/28 修复ToastUtils内存泄露,新增toast可根据系统字体显示不同字体,发布版本1.8.4 * 17/08/28 修复ToastUtils内存泄露,新增toast可根据系统字体显示不同字体,发布版本1.8.4
* 17/08/20 新增监听Activity生命周期,退出App,发布版本1.8.3 * 17/08/20 新增监听Activity生命周期,退出App,发布版本1.8.3
* 17/08/11 LogUtils的Builder改为Config,发布版本1.8.2 * 17/08/11 LogUtils的Builder改为Config,发布版本1.8.2
......
...@@ -37,7 +37,7 @@ android { ...@@ -37,7 +37,7 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
release { release {
minifyEnabled true minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} }
} }
...@@ -63,4 +63,4 @@ dependencies { ...@@ -63,4 +63,4 @@ dependencies {
testCompile "com.google.truth:truth:0.31" testCompile "com.google.truth:truth:0.31"
} }
//apply from: "https://raw.githubusercontent.com/xiaopansky/android-library-publish-to-jcenter/master/bintrayUpload.gradle" //apply from: "https://raw.githubusercontent.com/xiaopansky/android-library-publish-to-jcenter/master/bintrayUpload.gradle"
//gradlew bintrayUpload //gradle bintrayUpload
...@@ -550,6 +550,7 @@ public class CacheUtils { ...@@ -550,6 +550,7 @@ public class CacheUtils {
/** /**
* 获取缓存大小 * 获取缓存大小
* <p>单位:字节</p> * <p>单位:字节</p>
* <p>调用了Thread.join(),需异步调用,否则可能主线程会卡顿</p>
* *
* @return 缓存大小 * @return 缓存大小
*/ */
...@@ -559,6 +560,7 @@ public class CacheUtils { ...@@ -559,6 +560,7 @@ public class CacheUtils {
/** /**
* 获取缓存个数 * 获取缓存个数
* <p>调用了Thread.join(),需异步调用,否则可能主线程会卡顿</p>
* *
* @return 缓存个数 * @return 缓存个数
*/ */
...@@ -591,7 +593,8 @@ public class CacheUtils { ...@@ -591,7 +593,8 @@ public class CacheUtils {
private final long sizeLimit; private final long sizeLimit;
private final int countLimit; private final int countLimit;
private final Map<File, Long> lastUsageDates = Collections.synchronizedMap(new HashMap<File, Long>()); private final Map<File, Long> lastUsageDates = Collections.synchronizedMap(new HashMap<File, Long>());
private final File cacheDir; private final File cacheDir;
private final Thread mThread;
private CacheManager(final File cacheDir, final long sizeLimit, final int countLimit) { private CacheManager(final File cacheDir, final long sizeLimit, final int countLimit) {
this.cacheDir = cacheDir; this.cacheDir = cacheDir;
...@@ -599,11 +602,7 @@ public class CacheUtils { ...@@ -599,11 +602,7 @@ public class CacheUtils {
this.countLimit = countLimit; this.countLimit = countLimit;
cacheSize = new AtomicLong(); cacheSize = new AtomicLong();
cacheCount = new AtomicInteger(); cacheCount = new AtomicInteger();
calculateCacheSizeAndCacheCount(); mThread = new Thread(new Runnable() {
}
private void calculateCacheSizeAndCacheCount() {
new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
int size = 0; int size = 0;
...@@ -619,14 +618,25 @@ public class CacheUtils { ...@@ -619,14 +618,25 @@ public class CacheUtils {
cacheCount.getAndAdd(count); cacheCount.getAndAdd(count);
} }
} }
}).start(); });
mThread.start();
} }
private long getCacheSize() { private long getCacheSize() {
try {
mThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
return cacheSize.get(); return cacheSize.get();
} }
private int getCacheCount() { private int getCacheCount() {
try {
mThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
return cacheCount.get(); return cacheCount.get();
} }
......
...@@ -28,7 +28,7 @@ import java.lang.ref.WeakReference; ...@@ -28,7 +28,7 @@ import java.lang.ref.WeakReference;
*/ */
public final class SnackbarUtils { 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; public static final int LENGTH_INDEFINITE = -2;
......
...@@ -69,7 +69,7 @@ import static android.graphics.BlurMaskFilter.Blur; ...@@ -69,7 +69,7 @@ import static android.graphics.BlurMaskFilter.Blur;
*/ */
public final class SpanUtils { 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_BOTTOM = 0;
public static final int ALIGN_BASELINE = 1; public static final int ALIGN_BASELINE = 1;
......
...@@ -9,10 +9,6 @@ import android.support.annotation.LayoutRes; ...@@ -9,10 +9,6 @@ import android.support.annotation.LayoutRes;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.support.annotation.StringRes; import android.support.annotation.StringRes;
import android.support.v4.widget.TextViewCompat; 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.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
...@@ -31,11 +27,10 @@ import java.lang.ref.WeakReference; ...@@ -31,11 +27,10 @@ import java.lang.ref.WeakReference;
*/ */
public final class ToastUtils { public final class ToastUtils {
private static final String TAG = "ToastUtils"; private static final int DEFAULT_COLOR = 0xFEFFFFFF;
private static final int DEFAULT_COLOR = 0x12000000; private static final Handler HANDLER = new Handler(Looper.getMainLooper());
private static final Handler sHandler = new Handler(Looper.getMainLooper()); private static Toast sToast;
private static WeakReference<Toast> sToastWeakReference; private static WeakReference<View> sViewWeakReference;
private static WeakReference<View> sViewWeakReference;
private static int gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM; private static int gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
private static int xOffset = 0; private static int xOffset = 0;
private static int yOffset = (int) (64 * Utils.getApp().getResources().getDisplayMetrics().density + 0.5); private static int yOffset = (int) (64 * Utils.getApp().getResources().getDisplayMetrics().density + 0.5);
...@@ -89,9 +84,8 @@ public final class ToastUtils { ...@@ -89,9 +84,8 @@ public final class ToastUtils {
if (view != null) { if (view != null) {
return view; return view;
} }
final Toast toast = getToastFromWR(); if (sToast != null) {
if (toast != null) { return sToast.getView();
return toast.getView();
} }
return null; return null;
} }
...@@ -129,7 +123,7 @@ public final class ToastUtils { ...@@ -129,7 +123,7 @@ public final class ToastUtils {
* @param text 文本 * @param text 文本
*/ */
public static void showShortSafe(@NonNull final CharSequence text) { public static void showShortSafe(@NonNull final CharSequence text) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
show(text, Toast.LENGTH_SHORT); show(text, Toast.LENGTH_SHORT);
...@@ -143,7 +137,7 @@ public final class ToastUtils { ...@@ -143,7 +137,7 @@ public final class ToastUtils {
* @param resId 资源Id * @param resId 资源Id
*/ */
public static void showShortSafe(@StringRes final int resId) { public static void showShortSafe(@StringRes final int resId) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
show(resId, Toast.LENGTH_SHORT); show(resId, Toast.LENGTH_SHORT);
...@@ -158,7 +152,7 @@ public final class ToastUtils { ...@@ -158,7 +152,7 @@ public final class ToastUtils {
* @param args 参数 * @param args 参数
*/ */
public static void showShortSafe(@StringRes final int resId, final Object... args) { public static void showShortSafe(@StringRes final int resId, final Object... args) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
show(resId, Toast.LENGTH_SHORT, args); show(resId, Toast.LENGTH_SHORT, args);
...@@ -173,7 +167,7 @@ public final class ToastUtils { ...@@ -173,7 +167,7 @@ public final class ToastUtils {
* @param args 参数 * @param args 参数
*/ */
public static void showShortSafe(final String format, final Object... args) { public static void showShortSafe(final String format, final Object... args) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
show(format, Toast.LENGTH_SHORT, args); show(format, Toast.LENGTH_SHORT, args);
...@@ -187,7 +181,7 @@ public final class ToastUtils { ...@@ -187,7 +181,7 @@ public final class ToastUtils {
* @param text 文本 * @param text 文本
*/ */
public static void showLongSafe(@NonNull final CharSequence text) { public static void showLongSafe(@NonNull final CharSequence text) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
show(text, Toast.LENGTH_LONG); show(text, Toast.LENGTH_LONG);
...@@ -201,7 +195,7 @@ public final class ToastUtils { ...@@ -201,7 +195,7 @@ public final class ToastUtils {
* @param resId 资源Id * @param resId 资源Id
*/ */
public static void showLongSafe(@StringRes final int resId) { public static void showLongSafe(@StringRes final int resId) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
show(resId, Toast.LENGTH_LONG); show(resId, Toast.LENGTH_LONG);
...@@ -216,7 +210,7 @@ public final class ToastUtils { ...@@ -216,7 +210,7 @@ public final class ToastUtils {
* @param args 参数 * @param args 参数
*/ */
public static void showLongSafe(@StringRes final int resId, final Object... args) { public static void showLongSafe(@StringRes final int resId, final Object... args) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
show(resId, Toast.LENGTH_LONG, args); show(resId, Toast.LENGTH_LONG, args);
...@@ -231,7 +225,7 @@ public final class ToastUtils { ...@@ -231,7 +225,7 @@ public final class ToastUtils {
* @param args 参数 * @param args 参数
*/ */
public static void showLongSafe(final String format, final Object... args) { public static void showLongSafe(final String format, final Object... args) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
show(format, Toast.LENGTH_LONG, args); show(format, Toast.LENGTH_LONG, args);
...@@ -319,7 +313,7 @@ public final class ToastUtils { ...@@ -319,7 +313,7 @@ public final class ToastUtils {
* 安全地显示短时自定义吐司 * 安全地显示短时自定义吐司
*/ */
public static void showCustomShortSafe(@LayoutRes final int layoutId) { public static void showCustomShortSafe(@LayoutRes final int layoutId) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
setView(layoutId); setView(layoutId);
...@@ -332,7 +326,7 @@ public final class ToastUtils { ...@@ -332,7 +326,7 @@ public final class ToastUtils {
* 安全地显示长时自定义吐司 * 安全地显示长时自定义吐司
*/ */
public static void showCustomLongSafe(@LayoutRes final int layoutId) { public static void showCustomLongSafe(@LayoutRes final int layoutId) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
setView(layoutId); setView(layoutId);
...@@ -361,7 +355,7 @@ public final class ToastUtils { ...@@ -361,7 +355,7 @@ public final class ToastUtils {
* 安全地显示短时自定义吐司 * 安全地显示短时自定义吐司
*/ */
public static void showCustomShortSafe(@NonNull final View view) { public static void showCustomShortSafe(@NonNull final View view) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
setView(view); setView(view);
...@@ -374,7 +368,7 @@ public final class ToastUtils { ...@@ -374,7 +368,7 @@ public final class ToastUtils {
* 安全地显示长时自定义吐司 * 安全地显示长时自定义吐司
*/ */
public static void showCustomLongSafe(@NonNull final View view) { public static void showCustomLongSafe(@NonNull final View view) {
sHandler.post(new Runnable() { HANDLER.post(new Runnable() {
@Override @Override
public void run() { public void run() {
setView(view); setView(view);
...@@ -439,55 +433,36 @@ public final class ToastUtils { ...@@ -439,55 +433,36 @@ public final class ToastUtils {
*/ */
private static void show(final CharSequence text, final int duration) { private static void show(final CharSequence text, final int duration) {
cancel(); cancel();
Toast toast;
final View view = getViewFromWR(); final View view = getViewFromWR();
if (view != null) { if (view != null) {
toast = new Toast(Utils.getApp()); sToast = new Toast(Utils.getApp());
toast.setView(view); sToast.setView(view);
toast.setDuration(duration); sToast.setDuration(duration);
} else { } else {
if (messageColor != DEFAULT_COLOR) { sToast = Toast.makeText(Utils.getApp(), text, duration);
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);
}
// solve the font of toast // 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) { if (bgResource != -1) {
toastView.setBackgroundResource(bgResource); toastView.setBackgroundResource(bgResource);
} else if (backgroundColor != DEFAULT_COLOR) { } else if (backgroundColor != DEFAULT_COLOR) {
toastView.setBackgroundColor(backgroundColor); toastView.setBackgroundColor(backgroundColor);
} }
toast.setGravity(gravity, xOffset, yOffset); sToast.setGravity(gravity, xOffset, yOffset);
sToastWeakReference = new WeakReference<>(toast); sToast.show();
toast.show();
} }
/** /**
* 取消吐司显示 * 取消吐司显示
*/ */
public static void cancel() { public static void cancel() {
Toast toast = getToastFromWR(); if (sToast != null) {
if (toast != null) { sToast.cancel();
toast.cancel(); sToast = null;
}
sToastWeakReference = null;
}
private static Toast getToastFromWR() {
if (sToastWeakReference != null) {
final Toast toast = sToastWeakReference.get();
if (toast != null) {
return toast;
}
} }
Log.e(TAG, "getToastFromWR: ", new NullPointerException("Toast is null"));
return null;
} }
private static View getViewFromWR() { private static View getViewFromWR() {
...@@ -497,7 +472,6 @@ public final class ToastUtils { ...@@ -497,7 +472,6 @@ public final class ToastUtils {
return view; return view;
} }
} }
Log.e(TAG, "getViewFromWR: ", new NullPointerException("The custom view of toast is null"));
return null; return null;
} }
} }
...@@ -61,6 +61,7 @@ public final class Utils { ...@@ -61,6 +61,7 @@ public final class Utils {
@Override @Override
public void onActivityDestroyed(Activity activity) { public void onActivityDestroyed(Activity activity) {
sActivityList.remove(activity); sActivityList.remove(activity);
ToastUtils.cancel();
} }
}; };
......
...@@ -319,7 +319,9 @@ public class CacheUtilsTest { ...@@ -319,7 +319,9 @@ public class CacheUtilsTest {
} }
static class SerializableTest implements Serializable { static class SerializableTest implements Serializable {
private static final long serialVersionUID = -8021039743766780051L;
private static final long serialVersionUID = -5806706668736895024L;
String author; String author;
String className; String className;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册