Skip to content

Instantly share code, notes, and snippets.

View Hasiy's full-sized avatar
🤒
something something

Hasiy Hasiy

🤒
something something
View GitHub Profile
@Hasiy
Hasiy / FragmentArgumentDelegate.kt
Last active March 17, 2020 08:06 — forked from yanngx/FragmentArgumentDelegate.kt
Fragment arguments 使用kotlin 委托传值
package com.example.myapplication
import android.os.Binder
import android.os.Bundle
import androidx.core.app.BundleCompat
import androidx.fragment.app.Fragment
import kotlin.properties.ReadWriteProperty
import kotlin.reflect.KProperty
/**
Android 8.0 的Bitmap:
创建native层Bitmap,在native堆申请内存。
通过JNI创建java层Bitmap对象,这个对象在java堆中分配内存。
Android 7.0 的Bitmap:
通过JNI调用java层创建一个数组
然后创建native层Bitmap,把数组的地址传进去。
SoftReference<Bitmap> 软引用对象
WeakReference<ImageView> 弱引用对象
强引用: 普通变量都属于强引用,比如 private Context context;
软引用: SoftReference,在发生OOM之前,垃圾回收器会回收SoftReference引用的对象。
弱引用: WeakReference,发生GC的时候,垃圾回收器会回收WeakReference中的对象。
虚引用: 随时会被回收,没有使用场景。
@Hasiy
Hasiy / Bitmap.cpp
Created November 7, 2019 05:36
Nougat 7.0 | Bitmap
#define LOG_TAG "Bitmap"
#include "Bitmap.h"
#include "SkBitmap.h"
#include "SkPixelRef.h"
#include "SkImageEncoder.h"
#include "SkImageInfo.h"
#include "SkColorPriv.h"
#include "GraphicsJNI.h"
#include "SkDither.h"
@Hasiy
Hasiy / 多线程并发问题
Last active March 25, 2020 05:22
多线程并发问题
当只有一个线程写,其它线程都是读的时候,可以用volatile修饰变量
当多个线程写,那么一般情况下并发不严重的话可以用Synchronized,
Synchronized并不是一开始就是重量级锁,
在并发不严重的时候,比如只有一个线程访问的时候,是偏向锁;
当多个线程访问,但不是同时访问,这时候锁升级为轻量级锁;
当多个线程同时访问,这时候升级为重量级锁。
所以在并发不是很严重的情况下,使用Synchronized是可以的。
不过Synchronized有局限性,比如不能设置锁超时,不能通过代码释放锁。
ReentranLock 可以通过代码释放锁,可以设置锁超时。
高并发下,Synchronized、ReentranLock 效率低,
@Hasiy
Hasiy / ViewRootImpl
Created November 7, 2019 06:08
ViewRootImpl#checkThread 子线程不能更新UI,会抛异常
void checkThread() {
if (mThread != Thread.currentThread()) {
throw new CalledFromWrongThreadException("Only the original thread that created a view hierarchy can touch its views.");
}
}
@Hasiy
Hasiy / RxBus2
Created December 25, 2019 06:48
RxBus2 - Kotlin
import io.reactivex.Observable
import io.reactivex.subjects.PublishSubject
import io.reactivex.subjects.Subject
/*
* @Author: Hasiy
* @Date: 2019/12/25 - 14 : 37
* @Description: Android
* @Email: Hasiy.jj@gmail.com
@Hasiy
Hasiy / Application.kt
Last active December 25, 2019 06:50
获取app 当前状态 在前台还是在后台
/**
* @Author: hasiy
* @Date: 2019/1/12 - 17 : 06
* @LastEditors: hasiy
* @LastEditTime: 2019/1/12 - 17 : 06
* @Description: androoid
* @Email: hasiy.jj@gmail.com
* 程序主入口
*/
@Hasiy
Hasiy / LiveDataBus.java
Created December 25, 2019 07:31
数据通信总线LiveDataBus
public final class LiveDataBus {
private final Map<String, MutableLiveData<Object>> bus;
private LiveDataBus() {
bus = new HashMap<>();
}
private static class SingletonHolder {
private static final LiveDataBus DATA_BUS = new LiveDataBus();
@Hasiy
Hasiy / holdUp.kt
Last active November 16, 2022 03:21
kotlin 协程 http请求挂起处理
suspend fun <T> Call<T>.holdUp(): T {
return suspendCancellableCoroutine { continuation ->
continuation.invokeOnCancellation {
LogUtil.w("invokeOnCancellation: cancel the request.")
LogUtil.toastWarning("请求异常,请检查网络后重试!")
cancel()
}
enqueue(object : Callback<T> {
override fun onResponse(call: Call<T>, response: Response<T>) {
when (response.isSuccessful) {