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

see 08/30 log

上级 c54c4f81
......@@ -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
......
......@@ -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
......
......@@ -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);
......
......@@ -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));
......
......@@ -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'
......
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/20 新增监听Activity生命周期,退出App,发布版本1.8.3
* 17/08/11 LogUtils的Builder改为Config,发布版本1.8.2
......
......@@ -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
......@@ -550,6 +550,7 @@ public class CacheUtils {
/**
* 获取缓存大小
* <p>单位:字节</p>
* <p>调用了Thread.join(),需异步调用,否则可能主线程会卡顿</p>
*
* @return 缓存大小
*/
......@@ -559,6 +560,7 @@ public class CacheUtils {
/**
* 获取缓存个数
* <p>调用了Thread.join(),需异步调用,否则可能主线程会卡顿</p>
*
* @return 缓存个数
*/
......@@ -591,7 +593,8 @@ public class CacheUtils {
private final long sizeLimit;
private final int countLimit;
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) {
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();
}
......
......@@ -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;
......
......@@ -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;
......
......@@ -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<Toast> sToastWeakReference;
private static WeakReference<View> sViewWeakReference;
private static final int DEFAULT_COLOR = 0xFEFFFFFF;
private static final Handler HANDLER = new Handler(Looper.getMainLooper());
private static Toast sToast;
private static WeakReference<View> 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;
}
}
......@@ -61,6 +61,7 @@ public final class Utils {
@Override
public void onActivityDestroyed(Activity activity) {
sActivityList.remove(activity);
ToastUtils.cancel();
}
};
......
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册