• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    SHINIGAMIAndroid - otevřená mobilní platforma
    JOHNY_G
    JOHNY_G --- ---
    ADM: Zkusím to napsat jednoznačněji. Spustit se po bootu může úplně každá aplikace, a to bez zvláštního oprávnění. Ale dělat nemůže skoro nic, dokud se nedostane do popředí, takže zůstane v suspendovaném stavu, bez nároků na systémové prostředky. Já třeba pro jednoho klienta dělám aplikace, které vyžadují nepřetržitou konektivitu na Bluetooth. Tj. permanentní scan, automatické spojení, nepřerušená komunikace. Abych toho dosáhl, mám v manifestu registrované spuštění po bootu, ale hned poté spouštím službu na popředí, která se ohlásí notifikací ve stavovém řádku, a tam už musí po celou dobu běhu služby zůstat. Aby tam nevisela jen tak naprázdno, využívám ji k informování o aktuálním stavu spojení a základní interakci se zařízením (máme tam tlačítka), ale být tam musí. Pokud ty u dané podezřelé aplikace žádnou nevidíš (a tedy sám sis ji ručně v informacích o aplikaci neskryl, což jako uživatel můžeš), tak ta aplikace nic nedělá. Maximálně tu a tam nějaký malý nárazový task. Jestli doručení pushky umí spustit aplikaci, tak to na celém principu nic nemění a je to stejny příběh jako s tím bootem. Možná se spustí, ale nedělá nic. Dokonce ani neví, že nějakou notifikaci dostala, a už vůbec ne co v ní je :-).
    ADM
    ADM --- ---
    JOHNY_G: jeste jsem si to teda cetl, a mozna je to tak, ze po bootu muze aplikace vyuzit jen omezenych a presne definovanych API androidu, a ne spoustet svuj (cely) vlastni kod
    ADM
    ADM --- ---
    JOHNY_G: jo, dival jsem se a opravdu ten pripad s boltem je push notifikace z firebase cloud messages, to me nenapadlo (bylo mi to divny, kdyz jsem aplikaci nepouzil nejaky ten mesic)

    pouzivam microg, tak jsem se kouknul, a muzu registraci aplikace k FCM vypnout, a mam i volbu vypnout "start app on push message" (coz jsem u par aplikaci ihned udelal), takze tohle muze byt ten mechanismus, jak se aplikace typu whatsapp/viber/signal apod. dostane k lizu a vubec se spusti - porad uvazuji situaci po cistym bootu

    pokud by to bylo pouze takhle, tak je to naprosto v poradku, a je to v souladu s tim, co pises

    stale mam ale pocit, ze minimalne v minulosti v manifestu konkretnich app ta moznost spusteni aplikace po bootu byla, a nebo se toho dalo nejak oklikou dosahnout, a pritom se nejednalo se o user controlled privilege, coz je dle meho zasadni chyba, na mem zarizeni mam mit moznost rozhodovat o tom, jaky aplikacni kod se ma spoustet a kdy ja chci.

    moznost spustit aplikaci az na push FCM message to samozrejme resi a tak je to v poradku a spravne (pokud tedy zavru obe oci nad extremni vendor lock-in zavislosti na googlu), ale protoze sam nevim, jaka je aktualni situace (rekneme v A13) chtel bych potvrdit ci vyvratit, zda vyvojar aplikace dokaze dosahnout situace, ze po bootu bez uzivatelske interakce dosahne spusteni aplikace bez FCM push message

    pises "prakticky nemozne", no ja tomu taky tak rozumim , ale driv to slo a s tim jak se to rychle meni, tak nevim zda je to mozne i ted, a ty jako vyvojar bys to treba mohl vedet
    RAINBOF
    RAINBOF --- ---
    JOHNY_G: to plati v linuxu ale android je svoje kategorie :)
    JOHNY_G
    JOHNY_G --- ---
    RAINBOF: I 99 % je brzo :-). Plná paměť je užitečná paměť. Povinností operačního systému je ji v případě potřeby uvolňovat, ne držet prázdnou.
    JOHNY_G
    JOHNY_G --- ---
    ADM: Po bootu se může spustit libovolná aplikace bez oprávnění, ale jen v mezích, které jsem naznačil. Když má sychronizační službu, může se jednou za čas sychronizovat. Má-li widget, může ho jednou za čas aktualizovat. Pokud chce dělat cokoli vytrvalejšího, musí to být podmíněné zobrazením notifikace o službě na popředí. Pokud tam není, nic velkého neběží. Co se týče notifikací, tak tam jsou dva druhy:

    1) Lokální notifikace - ty můžou být buď vyvolané nějakou aktivitou uživatele, když je aplikace v popředí, nebo naplánovaným úkolem, a jejich spouštění řídí systémový plánovač. Když telefon používáš, tak to vyskočí v nastavený čas, když ne, tak v časovém okně vyhrazeném doze modem.
    2) Push notifikace odesílané serverem - ty chodí prakticky okamžitě bez ohledu na to, jestli je telefon zhasnutý nebo ne, ale už několik let nemají aplikace přístup ke cloud messagingu, pokud zrovna nemají aktivitu v popředí - tj. nekoukáš na jejich obrazovku. V ostatních případech je doručují Služby Google Play, které jsou součástí operačního systému, a aplikace se o její existenci dozví pouze v případě, že na ni klikneš. S extrémní pravděpodobností v ten moment aplikace vůbec neběží, i když z tvého pohledu zobrazila notifikaci. Proč nefungují po vynuceném ukončení aplikace, to je mi momentálně samotnému záhadou. Přísahal bych, že dříve to tak nebylo, ale bude to nějaký implementační detail Googlu, kterému nepotřebuju rozumět, jen o něm musím jako vývojář vědět :-)).

    Většina marketingových upozornění bývá typicky pushka.

    Tedy že by se aplikace "spouštěly a na pozadí něco dělaly" už je v posledních iteracích Androidu prakticky nemožné. Vždycky musíš něco vidět (obrazovku, notifikaci), aby mohla aplikace dělat něco víc, než pár sekund práce jednou za hodinu (ty hodnoty jsem vytáhnul z nosu, neber mě za slovo).
    RAINBOF
    RAINBOF --- ---
    ARIAEL: urco myslis tu osklivost pro exchange ze.


    JOHNY_G: zkusim to popatrat 50% je fakt brzo.
    ADM
    ADM --- ---
    JOHNY_G: skvely vysvetleni a shrnuti, diky za cas

    jak je tomu s opravnenim ... nazev varim z vody - run after boot ? protoze v seznamu managovatelnych opravneni to neni, a mam pocit, ze se na pozadi spousti kdejaka veledulezita appka, aby mi pak napriklad poslala notifikaci, ze jsem dlouho nejel boltem, a ma pro me slevu na pristi jizdu.

    tohleto jsem nikdy nepochopil, proc se spousteji a na pozadi neco delaji aplikace, ktery ja povazuji za ciste interaktivni, nebo minimalne vyzadujici user interakci az po ktere mohou provadet aktivitu na pozadi.
    ARIAEL
    ARIAEL --- ---
    RAINBOF: Mel jsem ho kdysi kdyz jsem musel - moc me to nezaujalo i kdyz v te dobe to melo neco do sebe - kdyz to bylo novy. Ale ja mel mnohem vic do cineni s tim jejich zazrakem na Win server.... Memory leaky a podobny veci - o to se jejich tvurci zrovna moc nestarali...
    JOHNY_G
    JOHNY_G --- ---
    RAINBOF: Opruz hláška je na BlackBerry naprosto typická - dělá ji Power Center a dá se díky bohu vypnout v jeho nastavení. Je to naprosto dementní implementace, která zobrazí hlášku při 50 % využité paměti, což je absurdní hned z několika důvodů. Jednak je paměť od toho, aby se využívala, a volná RAMka ti absolutně k ničemu není (už kvůli níže zmíněnému aplikačnímu heapu), a jednak ji Android uvolňuje zcela automaticky, kdykoli jí potřebuje víc. Takže existuje pramálo důvodů vůbec vědět, kolik ji máš volné, natož na to uživatele upozorňovat.

    Proč to pomáhá? Tady bude nejspíš určitou roli hrát výrobce (když jsem se kdysi o BB zajímal, tak si power useři stěžovali na mizerný process management) a zejména stáří operačního systému. Na osmičce si můžou celkem nerušeně běžet stará vlákna, která si aktivita vytvořila, když byla ještě vidět, a tudiž může ukončení aktivity skutečně zastavit probíhající práci. Pak můžu ještě fabulovat o různých specifikách toho konkrétního telefonu (třeba chyba v implementaci životního cyklu, blbě implementované recent apps jako takové, kdy samotné množství aplikací může využívat nepřiměřené množství systémových prostředků, atp.), ale nezanedbatelnou roli bude hrát i placebo.
    RAINBOF
    RAINBOF --- ---
    ARIAEL: "programatorskym umem" ? to rozved. pouzivam BB tak dlouho ze si pamatuju jak byl "novy G1" smesny telefon a to co popisujes zni jako oblibena urban legend. Nebo snad BB mas ? Hadam ze jsi se mozna setkal s KeyOne kde to bylo desny (ale to jsem si nekoupil]
    ARIAEL
    ARIAEL --- ---
    RAINBOF: No za prve jde o Android 8 = coz je hodne stary. S kazdou generaci se nastineny principy zavadeli vic a vic...
    Za druhy jde o Blackberry - jsi si jisty ze to neni upravene?
    A za treti o jakou aplikaci se jedna? O App od Blackberry? tam bych se tomu fakt nedivil, jejich aplikace byli vzdy zname svym "programatorskym umem"...
    RAINBOF
    RAINBOF --- ---
    JOHNY_G: No dobre. hele mam android 8 (blackberry key2) a v posledni dobe pokud neudelam to co ty rikas ze je k nicemu visi mi tam opruz hlaska ze ma system malo pameti. Proc to pomaha ? system je skutecne vidtelne rychlejsi.
    TEKKIT
    TEKKIT --- ---
    JOHNY_G: člověka jako jsi ty, jsem strašně potřeboval na gymplu v matice a fyzice! Díky
    JOHNY_G
    JOHNY_G --- ---
    Nastal čas zase pár lidem vysvětlit, jak funguje správa procesů v Androidu, je v tom celá řada mýtů a od Androidu 6 dál probíhají veliké průběžné změny.

    1) Clear all apps zavírá pouze aktivity (tj. viditelné obrazovky), nic jiného. Je naprosto bezpečné to používat, není to task killer, a aplikace takto odstraněná (stejně jako odswipnutím nahoru nebo do strany) se neukončí, jako to bývalo v dobách task killerů na Androidu 2.x. Veškeré background i foreground procesy běží dál, vč. widgetů, notifikací nebo synchronizačních služeb.
    2) Vliv na paměť je mizivý (troufám si říct nulový), protože aktivity se z paměti uvolňují hned v momentě, kdy je potřeba pro něco jiného. Většina aplikací v tom seznamu nedávných už dávno spí, a jsou ve stavu uložené instance. Po návratu se ty lépe napsané dokážou obnovit do původního stavu, ty hůře napsané vynulují stav obrazovky (hodně blbě napsané skočí i na jinou obrazovku). Ty hodně dlouho uspané už mohou být ukončené systémem a startují znovu. Hlavní role swipování z recent apps, popř. klikání na clear all je vizuální úklid, aby tam nestrašily appky, ke kterým se nechcete momentálně vracet.
    3) Jediný způsob, jak aplikaci skutečně ukončit, je vlézt do informací o aplikaci (buď přes systémové nastavení, nebo přes ikonku aplikace v Recent apps) a vynutit tam ukončení (force close). Doporučuji to nedělat, pokud k tomu nemáte dobrý důvod (např. testování, nebo se aplikace ocitne v rozbitém stavu) a nemáte v plánu ji rovnou spustit znovu. Dokud se totiž nespustí znovu (jistota je ručně, některé aplikace se mohou spustit i po restartu nebo jiné velmi specifické události), nebudou fungovat ani některé systémové funkce s ní spojené, které ve skutečnosti nepatří do aplikačního procesu, ale spravují je systémové služby - typicky push notifikace.
    4) Každá aplikace na Androidu má k dispozici jen malý paměťový heap (dříve to bývaly desítky MB, dneska nižší stovky). Za určitých okolností se může heap navýšit, ale ne moc. Pokud máte třeba 6 GB RAM, a běží tam třeba 10 aplikací s 350 MB heapem, tak máte furt dost paměti pro další aplikace, a ukončení jedné nepřidá paměť žádné další. Když výrobce dá appce 350 MB, tak bude mít furt k dispozici jen 350 MB, i kdybyste měli 3 GB volné paměti.
    5) Představa o tom, že aplikace běží na pozadí a dělají si co chtějí, je velice mylná, a s každou další verzí Androidu je ještě mnohem mylnější. Dnes (Android 13) už v zásadě nemůžete na pozadí dělat vůbec nic. Službu na pozadí můžete spustit jen z ručně spuštěné aplikace, a když to systému připadá, že už to trvá trochu moc dlouho, tak ji zabije. Cokoli delšího musí běžet jako služba na popředí, tj. musí se zobrazit viditelná notifikace ve stavové liště, jinak systém aplikaci nemilosrdně crashne. Pokud chcete, aby nebyla nahoře vidět pořád, musí si to změnit uživatel sám v nastavení upozornění, vývojář nemá právo spouštět službu s minimalizovanou nebo skrytou notifikací. Malé úkoly je možné dělat v rámci synchronizace, plánovaných úloh nebo obsluhy widgetu, ale musí to být malé tasky a nesmí probíhat moc často. S každou starší verzí Androidu jsou pravidla o něco volnější, ale to už je na uživateli, aby si vybral telefon, který má systém co možná nejaktuálnější, co možná nejdéle. Každopádně od Androidu 10 už je to hodně přísné, a už od Androidu 6 se musí aplikace dost snažit, aby vůbec mohly na pozadí fungovat.
    6) Ať už použije vývojář mechanismus jakýkoli, vždycky nad aplikací stojí ještě krutovládce zvaný Doze mode, jehož prací je zabít všechno, co podle něj uživatel právě nepoužívá. Jako bonus odkládá plánované úlohy do předem určených oken, podle toho, jak dlouho už je zhasnutý displej (takže se může např. upomínka o 20 minut opozdit). Aplikace s dobrým důvodem může požádat uživatele o výjimku a vyžádat si vypnutí optimalizace baterie, ale i tak se občasné popravě nevyhne. Nad tím ještě stojí další obdobná vrstva konkrétního výrobce, která může a nemusí tato nastavení respektovat, a zejména u čínských značek bývá extrémně agresivní (do takové míry, že se vám už třeba neoznamují ani zprávy z WhatsAppu, vypne se vám WiFi, Bluetooth a tak...). Pokud se vám stává, že se vám odpojují hodinky, nezvoní budíky, nebo vám přestávají chodit notifikace, vypněte konkrétním aplikacím optimalizaci baterie, a bude se vám lépe dýchat. Ale občas se to stejně vysere - nadávejte výrobcům, ne vývojářům :-).

    Zkrátka a jednoduše, na Androidu 2.x bylo možná obtížné napsat komplexnější aplikaci, která uživateli nevysaje RAMku a/nebo baterku, ale v dnešní době je absurdně složité napsat aplikaci, která vůbec dostane dost prostoru, aby udělala všechno co potřebuje. Zapomeňte, co jste se o Androidu naučili před 10 lety a přestaňte RAMku a baterku řešit. Google to řeší za vás, ať se vám to líbí nebo nelíbí :-)). Jestli vám v recent apps něco překáží, odswipněte to. Jestli to chcete vyčistit, vyčistěte to. Je to čistě UXová záležitost a nemá vliv na funkci aplikací.
    RAINBOF
    RAINBOF --- ---
    QWWERTY: Protoze to lidi nechtej a nepouzivaj. Chybi leader typu cannonical kterej rekne jak to bude. Obcas vzhlizim k LineageOS ale ten uz se puvodnim napadum vzdal a jen proste vydavaj Android.

    Popravde co chcem Android je system zalozenej na kradezi patentu na Javu coz pozdeji stalo Sun existenci a oskliveho pouziti linuxoveho jadra a soustavnem ojebavani GPL licenci.

    Nejbliz jsme zajimavemu stavu byli kdyz na Lumii sel nainstalovat android i Windows a oboji slo spustit pro ucely testovani na Raspberry PI.

    /mujnazor
    FORELLI
    FORELLI --- ---
    To ale přeci není problém androidu, ale spíše limitů zápisů úložišť/pamětí, ne?
    QWWERTY
    QWWERTY --- ---
    musim rict, ze tohle mi prijde fakt strasny
    android ze zacatku provazela idea, ze mame otevreny OS nad kterym ma uzivatel kontrolu
    a skoncili jsme v situaci, kdy si aplikace muze na pozadi delat co chce, neexistuje nic jako "kill and stay dead" nebo "app disable" a aktualni stav je takovy, kdy task killer je "kontraproduktivni" a je lepsi nechat aplikaci bezet, jak se ji zlibi
    MEDWYN
    MEDWYN --- ---
    DUNICAN: Presne tak. Nic tim neziskavas.
    Kliknutím sem můžete změnit nastavení reklam