Ticket Created
over 4 years ago

ACROPOLIS-2252

background process doesn't start on device

device: fenix 6, ciq 3.2.4, fw 15.71

the code (no code format - forum error as usually) below not start background (either with Duration or TMoment  in registerForTemporalEvent)

///app

using Toybox.Application    as APP;
using Toybox.WatchUi        as UII;
using Toybox.Background        as BAG;
using Toybox.System         as SYS;
using Toybox.Time             as TIM;


(:background)
class batteryusageSD extends SYS.ServiceDelegate
{
    function initialize()
    {
        ServiceDelegate.initialize();
    }

    function onTemporalEvent()
    {
        if(APP.getApp().getProperty("BAGkill"))
        {
            SYS.println("onTemporalEvent kill BAG");//not call on sim
            
            BAG.exit(null);
        }else
        {
            SYS.println("onTemporalEvent keep BAG");
            BAG.exit(true);
        }         
    }
}


(:background)
class batteryusageApp extends APP.AppBase
{
    var mV;
    
    function initialize()
    {
        AppBase.initialize();
    }

    // onStart() is called on application start up
    function onStart(state)
    {
    }

    // onStop() is called when your application is exiting
    function onStop(state)
    {
    }

    // Return the initial view of your application here
    function getInitialView()
    {
        mV = new batteryusageView();
        return [ mV, new batteryusageDelegate() ];
    }
    
    function getServiceDelegate()
    {
        return [new batteryusageSD()];
    }
    
    function startBAG()
    {
        setProperty("BAGkill", false);
        //BAG.registerForTemporalEvent(new TIM.Duration(300));
        var let = BAG.getLastTemporalEventTime();
        if(let)
        {
            let = let.add(new TIM.Duration(300));
        } else
        {
            let = TIM.now().add(new TIM.Duration(15));
        }
        BAG.registerForTemporalEvent(let);
    }
    
    function stopBAG()
    {
        setProperty("BAGkill", true);
        BAG.deleteTemporalEvent();
    }
    
    function onBackgroundData(d)
    {
        SYS.println("onBackgroundData");
        if(mV)
        {
            setProperty("IsMV", true);
               mV.onMeasureTMR("a.onBackgroundData");
           }else
           {
               setProperty("IsMV", false);
               UII.requestUpdate();
           }
    }
}

//delgate

using Toybox.WatchUi         as UII;
using Toybox.Application    as APP;

class batteryusageDelegate extends UII.BehaviorDelegate {

    function initialize()
    {
        BehaviorDelegate.initialize();
    }

    function onMenu()
    {
        UII.pushView(new Rez.Menus.MainMenu(), new batteryusageMenuDelegate(), WatchUi.SLIDE_UP);
        return true;
    }
    
    
    function onSelect()
    {
        return APP.getApp().mV.onSelect();
    }
    
    function onBack()
    {
        return APP.getApp().mV.onBack();
    }
    
    
    function onNextPage()
    {
        UII.requestUpdate();
    }
    
    function onPreviousPage()
    {
        UII.requestUpdate();
    }
}

//view

using Toybox.WatchUi            as UII;
using Toybox.Timer                 as TMR;
using Toybox.Time.Gregorian     as GRE;
using Toybox.Time                 as TIM;
using Toybox.Graphics             as GRA;
using Toybox.Math                 as MAT;
using Toybox.System             as SYS;
using Toybox.Background            as BAG;
using Toybox.Application        as APP;

class batteryusageView extends UII.View
{
    var mDrawNumTMR, mDrawNumTOT = 0 ,
    //mTMR,
    mIsMeasuring = false, mMeasureStartTIM, mMeasureStartBAT;
    
    function initialize()
    {
        View.initialize();
        //mTMR = new TMR.Timer();
        APP.getApp().setProperty("IsMV", null);
    }
    
    function onLayout(dc)
    {
        //prv(me, "onLayout");
//        setLayout(Rez.Layouts.MainLayout(dc));
        return true;
    }

    function getCurrentData()
    {
        return [MAT.floor(SYS.getSystemStats().battery), new TIM.Moment(TIM.now().value())];
    }
    
    function onBack()
    {
        tmrStop();
        return false;//exit app
    }
    
    function onMeasureTMR(from)
    {
        SYS.println("onMeasureTMR, from: " + from);
        mDrawNumTMR++;
        requestUpdate();
    }
    
    function tmrStart()
    {
        mIsMeasuring = true;
        
        var c= getCurrentData();
        mMeasureStartBAT = c[0];
        mMeasureStartTIM = c[1];
        
        mDrawNumTMR = 0;
        
        APP.getApp().startBAG();
//            mTMR.start(
//                method(:onMeasureTMR),
//                1000*60,
//                true);
        onMeasureTMR("v.onSelect tmr.start");
    }
    
    function tmrStop()
    {
        mIsMeasuring = false;
        //mTMR.stop();
        APP.getApp().stopBAG();
        onMeasureTMR("v.onSelect tmr.stop");
    }

    function onSelect()
    {
        if(mIsMeasuring)
        {
            tmrStop();
        }else
        {
            tmrStart();
        }
        return true;
    }
    
    function onUpdate(dc)
    {
        dc.setColor(GRA.COLOR_TRANSPARENT, GRA.COLOR_BLACK);
        dc.clear();
    
        var f = GRA.FONT_SYSTEM_TINY;
        var t;
        
        var c= getCurrentData();
        
        if(mMeasureStartTIM)
        {
            dc.setColor(GRA.COLOR_BLUE, GRA.COLOR_TRANSPARENT);
        
            dc.drawText(130,90, f, "mDrawNumTMR=" + mDrawNumTMR, GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
            
            var m = (c[1].value() - mMeasureStartTIM.value())/60;
            var T = (m / 60).format("%02d") + ":" + (m % 60).format("%02d");
            t = GRE.info(mMeasureStartTIM, TIM.FORMAT_SHORT);
            t = t.year + "-" + t.month.format("%02d") + "-" + t.day.format("%02d") + " " +
                t.hour.format("%02d") + ":" + t.min.format("%02d") + ":" + t.sec.format("%02d") + " " + T;
            dc.drawText(130, 110, f, t, GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
            
            t = c[0] - mMeasureStartBAT;
            
            m = m ? ((c[0] - mMeasureStartBAT)/m.toFloat()).format("%.2f") : 0;
            
            dc.drawText(130, 130, f, "BatSta=" + mMeasureStartBAT.format("%.0f") + "% " + m + "%/min", GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
        }
        
        dc.setColor(GRA.COLOR_GREEN, GRA.COLOR_TRANSPARENT);
        dc.drawText(130,20, f, "IsMV=" + APP.getApp().getProperty("IsMV"), GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
        
        
        mDrawNumTOT++;
        dc.setColor(GRA.COLOR_YELLOW, GRA.COLOR_TRANSPARENT);
        
        dc.drawText(130,190, f, "mDrawNumTOT=" + mDrawNumTOT, GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
        
        t = GRE.info(c[1], TIM.FORMAT_SHORT);
        t = t.year + "-" + t.month.format("%02d") + "-" + t.day.format("%02d") + " " +
            t.hour.format("%02d") + ":" + t.min.format("%02d") + ":" + t.sec.format("%02d");
        dc.drawText(130, 210, f, t, GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
        
        dc.drawText(130, 230, f, "BatCur=" + c[0].format("%.0f") + "%", GRA.TEXT_JUSTIFY_VCENTER + GRA.TEXT_JUSTIFY_CENTER);
        return true;
    }

}

Parents Comment Children
No Data