Цитата:
Сообщение от alecsisk
Всем привет.
Заметил что в фоне приложение перестает работать. Был слеплен анализатор, который выводит логи в файл. Оказывается air принудительно занижает fps после нескольких минут работы до 0, что мне совсем не нужно. Что я пробывал:
Код AS3:
URLRequestDefaults.idleTimeout = ApplicationSettings.IDLE_TIMEOUT; // 1000 * 60 * 60000
//NativeApplication.nativeApplication.systemIdleMode = SystemIdleMode.KEEP_AWAKE;
NativeApplication.nativeApplication.executeInBackground = true;
NativeApplication.nativeApplication.idleThreshold = 85000;
а также
Код AS3:
stage.frameRate = 30;
|
Я в ручную выполняю это действие. Суть в том, что-бы при переходе в трей, минимализировать расход ресурсов. Если этого не сделать, системный сборщик мусора может удалить приложения из трея, для освобождения памяти. К примеру Андроид, если ему не хватает оперы для активного процесса, начинает убивать фоновые. По списку от наибольшего к наименьшему кол-ву выделяемых ресурсов системой. Иногда такое возникает даже при переходе/открытии браузера из приложения
Код AS3:
public function enable(stage:Stage, view:Class):void {
Debug.log( 'StarlingService enable');
if (!_starling) {
Starling.handleLostContext = true;
Starling.multitouchEnabled = true;
_starling = new Starling(view, stage);
_starling.addEventListener(starling.events.Event.ROOT_CREATED, onStarlingEvent);
_starling.addEventListener(starling.events.Event.CONTEXT3D_CREATE, onStarlingEvent);
_starling.addEventListener(starling.events.Event.FATAL_ERROR, onStarlingEvent);
_starling.addEventListener(starling.events.Event.PARSE_ERROR, onDebugEvent);
_starling.addEventListener(starling.events.Event.IO_ERROR, onDebugEvent);
_starling.addEventListener(starling.events.Event.TEXTURES_RESTORED, onDebugEvent);
_starling.simulateMultitouch = true;
_starling.antiAliasing = 0;
_starling.showStats = false;
_starling.enableErrorChecking = false;
_starling.start();
this.stage = stage;
this.stage.addEventListener(flash.events.Event.RESIZE, stage_resizeHandler, false, int.MAX_VALUE, true);
NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvokeEvent);
// "solt"
if(Capabilities.cpuArchitecture == "ARM" || sleepMode ) {
NativeApplication.nativeApplication.addEventListener(flash.events.Event.DEACTIVATE, stage_deactivateHandler, false, 0);
}
}
}
protected function onInvokeEvent(event:InvokeEvent):void
{
Debug.log('Invoke'+event.reason+' :: '+event.arguments)
}
private function onDebugEvent(e:starling.events.Event):void
{
Debug.log('onDebugEvent > '+e.data+':'+this);
}
private function onStarlingEvent(e:starling.events.Event):void
{
Debug.log(e.data+' > '+e.type+' : '+this);
switch (e.type) {
case starling.events.Event.CONTEXT3D_CREATE:
contextCreated = true;
break;
case starling.events.Event.ROOT_CREATED:
rootCreated = true;
break;
case starling.events.Event.FATAL_ERROR:
Debug.alert(this,e.type);
return;
}
if (contextCreated && rootCreated)
this.dispatchEvent( new flash.events.Event(BaseStarlingService.STARLING_ON_READY ) );
}
public function get starling():Starling {
return _starling;
}
private function stage_resizeHandler(event:flash.events.Event):void
{
_starling.stage.stageWidth = this.stage.stageWidth;
_starling.stage.stageHeight = this.stage.stageHeight;
const viewPort:Rectangle = _starling.viewPort;
viewPort.width = this.stage.stageWidth;
viewPort.height = this.stage.stageHeight;
try
{
_starling.viewPort = viewPort;
}
catch(error:Error) {}
}
private function stage_deactivateHandler(event:flash.events.Event):void
{
_starling.stop(true);
Starling.current.nativeStage.frameRate = .1; // Starling.current.nativeStage = stage reference
NativeApplication.nativeApplication.addEventListener(flash.events.Event.ACTIVATE, stage_activateHandler, false, 0, true);
}
private function stage_activateHandler(event:flash.events.Event):void
{
NativeApplication.nativeApplication.removeEventListener(flash.events.Event.ACTIVATE, stage_activateHandler);
Starling.current.nativeStage.frameRate = 60;
_starling.start();
if ( this.stage ) this.stage.quality = this.stage.quality ;
}
Цитата:
Сообщение от alecsisk
Ничего из вышеперечисленного мне не помогло. Fps все равно проседает до 0. Смотрю fps так:
Код AS3:
var fps:int = framesNumber / ((getTimer() - startTime) / 1000)
|
чем у объекта stage геттер
frameRate не нравится?
Цитата:
Сообщение от alecsisk
Есть идеи?
|
Есть достаточно функциональный
велосипед для отладки, который сам использую.