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) == )
{
AndroidJNI.PopLocalFrame(IntPtr.Zero);
return true;
}
AndroidJNI.ExceptionClear();
return false;
} public static int GetFreeLocalReferenceCount()
{
int num2 = ;
int count = ;
while (DoesHaveLocalReferenceCount(count) && (count < 0x40000000))
{
count *= ;
}
while (count > )
{
int num4 = num2 + count;
if (DoesHaveLocalReferenceCount(num4))
{
num2 = num4;
}
count /= ;
}
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) != )
{
AndroidJNI.ExceptionClear();
if (AndroidJNI.PushLocalFrame() != )
{
throw new InsufficientMemoryException(string.Format("Failed to allocate memory for {0} local JNI references", capacity));
}
}
}
}

JniHelper 含安卓推送的更多相关文章

  1. 个推安卓推送SDK集成步骤详解

    以下是一位开发者在集成个推安卓推送SDK时候的亲身经历: 作者:吃饱了想睡. 概述 公司准备采用个推作为第三方推送平台,我作为客户端的头号小鸟,掐指一算已经毕业 0.1 年了,Leader 准备把这个 ...

  2. 为Titanium创建自己的安卓推送模块

    在手机应用中,推送是一个非常重要的功能.相对来说ios应用的推送功能很容易做,因为它统一都是用苹果的APNS服务实现的.但安卓这边就比较混乱了,虽然谷歌也推出了类似苹果的官方推送服务,但由于谷歌的服务 ...

  3. 使用Google Cloud Messaging (GCM),PHP 开发Android Push Notifications (安卓推送通知)

    什么是GCM? Google Cloud  Messaging (GCM) 是Google提供的一个服务,用来从服务端向安卓设备发送推送通知. GCM分为客户端和服务端开发. 这里我们只介绍服务端开发 ...

  4. 安卓推送——个推服务端api使用误区

    首先你需要在个推开放着平台上注册你的应用,以及获得以下几个必要的值APPID |APPKEY | MASTERSECRET,本文假设你已经完成上述步骤以及完成客户端SDK的集成. 原理 个推服务端ap ...

  5. 苹果IOS、安卓推送功能开发

    IOS推送开发:以下是基于开源javapns推送开发1.DerInputStream.getLength(): lengthTag=111, too big.先排除是否由于打包时证书 .p12 文件被 ...

  6. 安卓统一推送联盟融云成唯一IM云服务企业

    10月16日,安卓统一推送联盟在北京正式成立,来自中国信息通信研究院,华为.小米.OPPO等手机厂商,BAT等互联网巨头公司等75家机构及企业代表参加了联盟成立大会,融云也受邀参会并成为首批成员单位中 ...

  7. C#个推SDK推送安卓+iOS

    下载个推SDK,找到这两个dll直接引用. using引用 using com.gexin.rp.sdk.dto; using com.igetui.api.openservice; using co ...

  8. 信鸽推送.net 服务端代码

    //推送代码 private void send() { #region 安卓推送 XingeApp app = new XingeApp("accessId", "se ...

  9. android推送-PHP(第三方推送:个推)

    在项目初期,就安卓推送功能怎么做,曾经参考过例如XMPP之类的推送方法.但苦于那些是些英文档案,又没太多时间研究,所以打算采用第三方推送(个推,极光推送等),后来在美图技术老大推荐下用采用个推. PS ...

随机推荐

  1. #291 div.2

    A.水题 数字翻转,将每一位大于等于5的数字t翻转成9-t,注意不要有前导0,且翻转后数字的位数不变(即9999->9000...刚开始以为应该翻转成0了= =) #include<ios ...

  2. Android 常见adb命令

    1.  查看所有已链接的设备 命令: adb devices   例: C:\Users\laiyu>adb devices List of devices attached 5d3b5aac  ...

  3. 【转】为 XmlNode.SelectNodes 加上排序功能

    测试资料: <Config> <Item a='/> <Item a='/> <Item a='/> <Item a='/> <Ite ...

  4. 一些实用的js高级技巧

    技巧一之setTimeout. 应用案例:比如你想一个函数循环执行10次,怎么办?以前通常是先setInterval,然后clearInterval,技巧一就是克服这个问题 (function () ...

  5. scala学习笔记:理解类继承

    scala> import scala.reflect._ import scala.reflect._ scala> class Person(@BeanProperty var nam ...

  6. content = "IE=edge,chrome=1" 详解

    content = "IE=edge,chrome=1" 详解 < meta http-equiv = "X-UA-Compatible" content ...

  7. android开发中R文件丢失

    R文件在android开发中,占据着中会在重要的地位,里面的内容有系统自动生成,不可随意修改,然而在开发过程中,总是不可知的丢失,这里总结一下修补方法   #.在Eclipse里可以         ...

  8. ### 学习《C++ Primer》- 7

    Part 7: 重载运算与类型转换(第14章) // @author: gr // @date: 2015-01-08 // @email: forgerui@gmail.com 一.重载运算符要求 ...

  9. CSS3几个速记标签2

    @font-face:CSS3允许使用自己的字体,用户会自动下载     语法:@font-face{font-family:---:src:url(---)}     如果要使用粗体,必须新添加另一 ...

  10. 简单jquery 鼠标悬停提示效果

    记得自己引入jq插件哦~~~ <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...