• JniHelper 含安卓推送


    using System;
    using System.Runtime.CompilerServices;
    using UnityEngine;
    
    internal static class JniHelper
    {
        public static void CallStaticSafe(this AndroidJavaClass clazz, string methodName, params object[] args)
        {
            PushLocalFrame();
            try
            {
                clazz.CallStatic(methodName, args);
            }
            finally
            {
                PopLocalFrame();
            }
        }
    
        public static void CallStaticSafe(this AndroidJavaObject jo, string methodName, params object[] args)
        {
            PushLocalFrame();
            try
            {
                jo.CallStatic(methodName, args);
            }
            finally
            {
                PopLocalFrame();
            }
        }
    
        private static bool DoesHaveLocalReferenceCount(int count)
        {
            if (AndroidJNI.PushLocalFrame(count) == 0)
            {
                AndroidJNI.PopLocalFrame(IntPtr.Zero);
                return true;
            }
            AndroidJNI.ExceptionClear();
            return false;
        }
    
        public static int GetFreeLocalReferenceCount()
        {
            int num2 = 0;
            int count = 1;
            while (DoesHaveLocalReferenceCount(count) && (count < 0x40000000))
            {
                count *= 2;
            }
            while (count > 0)
            {
                int num4 = num2 + count;
                if (DoesHaveLocalReferenceCount(num4))
                {
                    num2 = num4;
                }
                count /= 2;
            }
            return num2;
        }
    
        public static void PopLocalFrame()
        {
            AndroidJNI.PopLocalFrame(IntPtr.Zero);
        }
    
        public static IntPtr PopLocalFrame(IntPtr result)
        {
            return AndroidJNI.PopLocalFrame(result);
        }
    
        public static void PushLocalFrame()
        {
            PushLocalFrame(0x80);
        }
    
        public static void PushLocalFrame(int capacity)
        {
            if (AndroidJNI.PushLocalFrame(capacity) != 0)
            {
                AndroidJNI.ExceptionClear();
                if (AndroidJNI.PushLocalFrame(0) != 0)
                {
                    throw new InsufficientMemoryException(string.Format("Failed to allocate memory for {0} local JNI references", capacity));
                }
            }
        }
    }
  • 相关阅读:
    js和c#小数四舍五入
    c#连接关闭了,事务并没有关闭
    SQLNET跟踪tnsping过程
    关闭listener监听日志
    DBMS_RANDOM 用法
    获取oracle当前系统设置了哪些事件
    oracle获取主机服务器IP
    动态性能视图v$session_longops
    PRINT_TABLE 列以行形式显示
    mac 开启ntfs 权限
  • 原文地址:https://www.cnblogs.com/123ing/p/3899317.html
Copyright © 2020-2023  润新知