zoukankan      html  css  js  c++  java
  • 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));
                }
            }
        }
    }
  • 相关阅读:
    事件委托,元素节点操作,todolist计划列表实例
    事件冒泡
    jquery事件三 -- load(), ready(), resize()以及bind()事件
    jquery事件二 -- 选项卡,失去焦点
    jqury动画,循环
    jquery事件一 ---鼠标移入移出
    例子2--定时器之无缝滚动
    例子3--元素绝对位置以及置顶菜单
    例子1--手风琴
    jquery之链式调用,层级菜单
  • 原文地址:https://www.cnblogs.com/123ing/p/3899317.html
Copyright © 2011-2022 走看看