Nya downloads medan en DownloadService körs

Diskussion i 'Frågor, support och diskussion' startad av Dahliz91, 7 augusti 2012.

  1. Dahliz91

    Dahliz91 Senior Droid Medlem

    Blev medlem:
    28 januari 2010
    Inlägg:
    1.084
    Mottagna gillanden:
    212
    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro

    MINA ENHETER

    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro
    Jag skriver en Podcast Manager och ska göra en DownloadService för att hantera nedladdningarna. När man trycker på ladda ner behöver jag på något sätt kolla om det redan finns en DownloadService som körs och ifall den körs redan så behöver jag kunna skicka in ett ID till en Episode som ska laddas ner så att den läggs till i listan som ska laddas ner. Någon som har någon bra idé för hur man skulle kunna göra det?
     
  2. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 oktober 2009
    Inlägg:
    2.349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Låt DownloadService vara en singleton som håller koll på alla nedladdningar i en lista eller liknande. DownloadService hanterar alla nedladdningar i AsyncTasks där en startas för varje nedladdning.
     
    Dahliz91 gillar detta.
  3. Dahliz91

    Dahliz91 Senior Droid Medlem

    Blev medlem:
    28 januari 2010
    Inlägg:
    1.084
    Mottagna gillanden:
    212
    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro

    MINA ENHETER

    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro
    Tack för tipset! Men hur ska man få ihop det så att man dels kan kommunicera med den samtidigt som den väl behöver köras i en separat tråd för att kunna "leva sitt eget liv".
     
  4. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 december 2009
    Inlägg:
    1.594
    Mottagna gillanden:
    172

    MINA ENHETER

    När du uppdaterar din notifikation så kan du (om du exempelvis använder AsyncTask) använda onProgressUpdate() till att kolla om några nya nerladdningsrequests har kommit.

    Jag skulle göra en lista som inte är bunden till nerladdningen i sig, utan att när en nerladdning kommer, lägg till ett id i listan, när den är färdig, ta bort id:et från listan. Sedan kontrollerar du om listan är tom eller inte vid varje uppdatering av notifikationen.
     
    Dahliz91 gillar detta.
  5. Dahliz91

    Dahliz91 Senior Droid Medlem

    Blev medlem:
    28 januari 2010
    Inlägg:
    1.084
    Mottagna gillanden:
    212
    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro

    MINA ENHETER

    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro
    Så om jag har en AsyncTask så kallar jag helt enkelt på typ en Singelton klass som heter DownloadHelper eller nåt och kollar om den fått in några nya id'n?

    På något sätt behöver jag ju veta om jag ska starta en ny asyncTask eller inte. Eller ska den helpern i så fall hålla koll på om en tasken är startad och helt hantera det istället för varje ny tillagd download.
     
  6. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 december 2009
    Inlägg:
    1.594
    Mottagna gillanden:
    172

    MINA ENHETER

    Det är så jag skulle ha gjort.

    Så här skulle jag gjort:

    Du ger varje kommande nerladdning ett id. Detta id lägger du in i en lista i din singleton. Varje gång onProgressUpdate(), alternativt doInBackground(), kallas i din AsyncTask så kollar du,

    1. om nuvarande nerladdning är färdig
    2. om den aktuella nerladdningen är färdig, ta bort id:et från listan
    3. kontrollera om det finns ytterligare id:n i din lista
    4. i så fall, förmedla detta till din singleton som håller reda på aktuellt nerladdningsid
    5. ladda ner nästa id
    6. fortsätt med samma procedur tills listan är tom
     
    Dahliz91 gillar detta.
  7. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 juli 2010
    Inlägg:
    6.448
    Mottagna gillanden:
    2.199

    MINA ENHETER

    Om jag inte minns helt fel, sitter vid telefonen, kan dra upp källa senare men det kommer ifrån mailinglistan för sdkt. Så bör du tänka på att poolen som kör ut asynctasks blev ändrade med ics (kan vara senare) vilket betyder att de körs seriellt nuförtiden. Vill du kunna köra sakerna parallellt för alla bör du nog kolla threadpoolexecutor, kan ha lite fel på namnet. Var den sedan läggs är en annan femma.

    Men för enklare hämtningar är asynctask jäkligt trevligt men det finns begränsningar samtidigt som att den är sjukt smidig med tanke på onPre och onPost om man inte vill hantera sådant själv med trådar.

    Sent from my Galaxy Nexus using Tapatalk 2
     
  8. Dahliz91

    Dahliz91 Senior Droid Medlem

    Blev medlem:
    28 januari 2010
    Inlägg:
    1.084
    Mottagna gillanden:
    212
    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro

    MINA ENHETER

    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro
    Det är ju en musikfil i taget, tills alla är nedladdade.
     
  9. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 juli 2010
    Inlägg:
    6.448
    Mottagna gillanden:
    2.199

    MINA ENHETER

    Då blir det ju perfekt, var inte helt med på exakt hur du har tänkt att göra det. Läst folk som stött på problem kring det och tänkte bara påpeka det hela.

    Sent from my Galaxy Nexus using Tapatalk 2
     
    Dahliz91 gillar detta.
  10. Dahliz91

    Dahliz91 Senior Droid Medlem

    Blev medlem:
    28 januari 2010
    Inlägg:
    1.084
    Mottagna gillanden:
    212
    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro

    MINA ENHETER

    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro
    Tack för tipset. As bra. Men hur ska man göra med tasken, man behöver ju hålla koll på om den är startad eller inte. Annars tror jag att jag har ganska bra koll på hur det ska gå till efter det här inlägget :D
     
  11. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 oktober 2009
    Inlägg:
    2.349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Spara varje task i en lista och ta bort de som är klara.
     
  12. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 december 2009
    Inlägg:
    1.594
    Mottagna gillanden:
    172

    MINA ENHETER

    Jag hängde inte riktigt med på vad du menade nu, men om tjänsten är startad så innehåller ju listan x > 0, x antal tjänster. Om den inte är startad så är x = 0. Om jag nu förstod dig rätt med frågan det vill säga.
     
    Last edited: 8 augusti 2012
  13. Dahliz91

    Dahliz91 Senior Droid Medlem

    Blev medlem:
    28 januari 2010
    Inlägg:
    1.084
    Mottagna gillanden:
    212
    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro

    MINA ENHETER

    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro
    Jag menar när jag väljer att ladda ner ett avsnitt av en podd så läggs den till i listan. Men servicen måste ju vara igång också, annars kommer den ju inte att hämtas från listan. Så på något sätt måste man ju veta ifall servicen redan är igång så att man ifall den inte är det kan starta den.

    Alltså jag behöver ju veta om min AsyncTask som ska sköta nedladdningarna körs så att jag vet ifall jag behöver starta den.
     
    Last edited: 8 augusti 2012
  14. ViLANDER

    ViLANDER Senior Droid Medlem

    Blev medlem:
    12 december 2009
    Inlägg:
    1.594
    Mottagna gillanden:
    172

    MINA ENHETER

    Du kan ju bara ha en flagga i din singleton som indikerar huruvida en service körs eller inte. Om flaggan är false så starta en ny AsyncTask, annars inte.
     
  15. Dahliz91

    Dahliz91 Senior Droid Medlem

    Blev medlem:
    28 januari 2010
    Inlägg:
    1.084
    Mottagna gillanden:
    212
    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro

    MINA ENHETER

    Operatör:
    Halebop
    Telefon:
    iPhone 12 Pro
    Funderade på det också. Tänkte om det fanns något "snyggare" sätt :D
     
  16. e7andy

    e7andy Professional Droid Hedersmedlem

    Blev medlem:
    14 oktober 2009
    Inlägg:
    2.349
    Mottagna gillanden:
    835
    Telefon:
    Huawei P10 Plus

    MINA ENHETER

    Telefon:
    Huawei P10 Plus
    Telefon 2:
    Nexus 5
    Telefon 3:
    ADP1
    Övrigt:
    LG G Watch R, ChromeCast
    Du instantierar en ny AsyncTask för varje nedladdning och exekverar den direkt. Det existerar alltså aldrig en AsyncTask som inte är startad.