index.uts 1.3 KB
Newer Older
1
import { UTSAndroid } from "io.dcloud.uts"
2
import { OffMemoryWarning, OnMemoryWarning, OnMemoryWarningCallback, OnMemoryWarningCallbackResult } from "../interface.uts"
3

杜庆泉's avatar
杜庆泉 已提交
4

5 6 7
let listeners: OnMemoryWarningCallback[] = []

const onAppTrimMemoryListener = (ret: number) => {
8
    listeners.forEach(listener => {
9 10 11
		let res:OnMemoryWarningCallbackResult = {
			level:ret
		}
12 13
        listener(res)
    })
14 15
}

16 17

@Suppress("DEPRECATION")
18
export function onMemoryWarning(callback: OnMemoryWarningCallback) {
19
    if (listeners.length == 0) {
杜庆泉's avatar
杜庆泉 已提交
20
		// 仅首次执行底层的实际监听
21 22
        UTSAndroid.onAppTrimMemory(onAppTrimMemoryListener)
		UTSAndroid.onAppActivityDestroy(()=>{
杜庆泉's avatar
杜庆泉 已提交
23 24 25
			// listeners 默认是静态常量周期,activity 销毁时,需要手动清空
			listeners = []
		})
26 27
    }
    listeners.push(callback)
杜庆泉's avatar
杜庆泉 已提交
28
}
29

30
@Suppress("DEPRECATION")
31
export function offMemoryWarning(callback: OnMemoryWarningCallback | null = null) {
32 33
	
	if(callback == null){
杜庆泉's avatar
杜庆泉 已提交
34 35
		// 清除全部回调
		listeners = []
36
		UTSAndroid.offAppTrimMemory(null);
杜庆泉's avatar
杜庆泉 已提交
37
		return
38
	}
39
	
杜庆泉's avatar
杜庆泉 已提交
40
	// 清除指定回调
41 42 43 44 45 46 47 48
    const index = listeners.indexOf(callback)
    if (index > -1) {
        listeners.splice(index, 1)
    }
    if (listeners.length == 0) {
        // 当用户不再监听时,移除底层实际监听
        UTSAndroid.offAppTrimMemory(onAppTrimMemoryListener)
    }
49
}