使用Appcelerator Hyperloop调用TiApplication类方法时无法引入该类求解决
我来帮你捋清楚用Hyperloop调用Android原生TiApplication类的正确方式,你遇到的无法引入类、调用失败的问题,主要是对单例类的调用逻辑理解有误,再配合几个配置和验证步骤应该就能解决了。
不要实例化TiApplication,直接获取单例实例
TiApplication是Android端的全局应用单例,压根不能用new来创建对象,正确姿势是调用它的getInstance()方法获取唯一实例。你之前的代码里new TiApplicationClass是核心错误,改成下面的写法试试:// 正确获取TiApplication单例实例 var TiApplication = require('org.appcelerator.titanium.TiApplication').getInstance(); var isInForeground = TiApplication.isCurrentActivityInForeground(); Ti.API.log("isInForeground: " + isInForeground);确认Hyperloop已正确开启
先检查你的tiapp.xml里有没有开启Hyperloop支持,必须添加这两行配置:<property name="hyperloop.enabled" type="bool">true</property> <property name="android.hyperloop.enabled" type="bool">true</property>另外还要确保项目已经安装了Hyperloop模块,旧版Titanium可以用
appc install hyperloop命令安装,新版则要确认项目依赖中包含Hyperloop组件。验证方法的访问权限(备选方案:用前端API替代)
查看TiApplication的源码,要是isCurrentActivityInForeground()是包级私有方法(没有public修饰),Hyperloop是没法直接调用的。这种情况下,其实更推荐用Titanium自带的前端事件来监听前后台状态,比原生调用更简单可靠:let isAppInForeground = true; Ti.App.addEventListener('pause', () => { isAppInForeground = false; Ti.API.log("应用进入后台"); }); Ti.App.addEventListener('resume', () => { isAppInForeground = true; Ti.API.log("应用回到前台"); }); // 直接使用isAppInForeground变量判断当前状态清理缓存后重新构建
如果配置都没问题但还是找不到类,试试删除项目根目录下的build文件夹,然后重新运行appc run android——有时候旧的构建缓存会导致类加载异常,清掉之后大概率能解决。
内容的提问来源于stack exchange,提问作者Dieskim

