Coc*_*ico 7 android android-service cordova
任何人都可以向我解释keepRunning如何在Android的config.xml中工作.
我的意思是,我不想知道如何编写指令,但它是如何工作的,它如何影响Android应用程序的执行?它是否在后台创建服务?
如果有人能找到我们可以看到它如何工作的来源,那将是伟大的
谢谢.
编辑:我尝试分析生成的代码,分析Android设置中的RAM,服务和进程.而我的结论是.....什么都不做.如果您尝试使用GPS制作跟踪用户的应用,请不要使用Cordova.要正确跟踪用户,您需要使用START_STICKY选项创建服务.所以,它是在本机代码中.你失去了对CrossPlatform的兴趣,因为你必须为所有平台重新编码服务,在我看来,Native Service和Cordova App之间的通信并不容易.
在结论中,如果你使用Cordova,你必须知道你不能使用所有原生的力量,你必须做出选择: - 简单的dev(主观)和crossplaform(真正的跨平台?)和 - 本机开发与它的力量和没有兼容性问题,但您必须为一个平台制作一个应用程序
我不是JS/Cordova开发人员,我是Android开发人员.一旦我使用Cordova插件,就遇到了一些问题并对这个问题进行了一些调查.
keepRunning标志的一般用途是指示应用程序暂停时是否应停止JS计时器(转到后台).回答你的问题:不,它不会创建任何新服务.在这方面,现有设计非常简单.
所述keepRunning标志在定义CordovaActivity.java如下:
// Keep app running when pause is received. (default = true)
// If true, then the JavaScript and native code continue to run in the background
// when another application (activity) is started.
protected boolean keepRunning = true;
Run Code Online (Sandbox Code Playgroud)
其主要目的是在CordovaWebView.java中暂停 Cordova应用程序时禁用JS计时器:
public void handlePause(boolean keepRunning)
{
LOG.d(TAG, "Handle the pause");
// Send pause event to JavaScript
this.loadUrl("javascript:try{cordova.fireDocumentEvent('pause');}catch(e){console.log('exception firing pause event from native');};");
// Forward to plugins
if (this.pluginManager != null) {
this.pluginManager.onPause(keepRunning);
}
// If app doesn't want to run in background
if (!keepRunning) {
// Pause JavaScript timers (including setInterval)
this.pauseTimers();
}
paused = true;
}
Run Code Online (Sandbox Code Playgroud)
请注意,插件也会通过PluginManager通知,因此理论上他们可以处理app暂停事件,根据keepRunning标志停止(或不停止)他们在后台的活动.
在我的情况下,当keepRunning为真时我有一个问题/错误,但无论如何JS计时器都被停止了.之所以发生这种情况,是因为CordovaActivity.java中有与该标志相关的其他功能:
/**
* Launch an activity for which you would like a result when it finished. When this activity exits,
* your onActivityResult() method will be called.
*
* @param command The command object
* @param intent The intent to start
* @param requestCode The request code that is passed to callback to identify the activity
*/
public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) {
this.activityResultCallback = command;
this.activityResultKeepRunning = this.keepRunning;
// If multitasking turned on, then disable it for activities that return results
if (command != null) {
this.keepRunning = false;
}
// Start activity
super.startActivityForResult(intent, requestCode);
}
Run Code Online (Sandbox Code Playgroud)
当Cordova应用程序启动另一个Android活动时,主要的Cordova活动(使用WebView的屏幕)进入后台并因此暂停.在我的情况下,它是通过谷歌地图插件制作的,它通过Cordova应用程序启动GM屏幕.
上面的代码关闭了keepRunning标志,这意味着当被调用的活动出现时(在CordovaActivity.onPause方法中),无论keepRunning是true还是false,JS计时器都会被停止!
对于一些不清楚(并没有记录)的目的,它看起来像是一种技巧,我不知道它的上下文.在我的情况就引起了一个错误,我只是删除keepRunning在处理startActivityForResult,重新编译科尔多瓦和它的工作确定.
增加:关于使用GPS服务 - 你是对的,我同意.作为具有相关(GPS)经验的Android开发人员,我可以说正确的方法(可能是唯一可接受的)是使用服务.据我所知,Cordova没有为它提供任何功能,所以我认为它应该通过一个插件来实现.我的意思是你可以编写用于GPS功能的原生Android代码(作为服务实现)并从JS代码访问它.我相信这是Cordova的常见解决方案.
| 归档时间: |
|
| 查看次数: |
5067 次 |
| 最近记录: |