Beiträge von Marco Feltmann

    PhoneGap klingt so, als wäre es genau für Dich gemacht.


    Allerdings kann es sein, dass zumindest Apple Deine App nicht zulässt, wenn sie keinen Mehrwert zu einer Website bietet.
    Überhaupt scheinst Du mit Deinen Fähigkeiten eher für eine WebApp geeignet zu sein.

    Also wo Dein Problem jetzt genau liegt weiß ich auch nicht.


    So richtig sinnvoll ist Dein Code allerdings nicht.
    Einerseits rufst Du in der onStart() die super.onResume() auf anstatt der super.onStart().
    Andererseits übergibst Du nirgendwo das Content View, so dass Deine Textfelder immer null sind.


    Wie dem auch sei, dieser Code läuft. Zumindest auf dem Nexus 4 mit KitKat 4.4.4
    (Das Bild sowie unnötig überschriebene Methoden habe ich rausgenommen, hat ja nix mit dem Thema zu tun und erhöht die Lesbarkeit.)


    Also ich persönlich würde da wie folgt vorgehen:


    Login und gesalzenen SHA256 Hash des Kennwortes (oder mit welchem Hash auch immer die Website das Kennwort abgleicht) in die SharedPreferences packen.
    Nach erfolgreichem Login der Website die Session ID in die SharedPreferences packen. (Du kommst von jeder Activity aus auf die SharedPreferences)


    Bei jeder Kommunikation mit dem Server dann die Session ID verwenden.
    Wenn die Session ID ungültig wird (abgelaufen wegen zu langer Inaktivität oder so), dann raus damit aus den SharedPreferences und zurück auf den Login Screen.


    Eventuell gleich auf OAuth wechseln (Facebook/Twitter/Google+)

    Wenn Du Deine App komplett beendest, killst Du damit auch alle Hintergrundprozesse, Services etc.pp.
    Im besten Fall kannst Du das über die Settings->Apps->«App Name»->Stoppen erreichen.


    Du kannst nur verhindern, dass Dein Service abschmiert, in dem Du dafür sorgst, dass er nicht an die laufende App gebunden ist.
    Da Du nicht nur auf den UI Thread sondern sicherlich auch auf irgend einen Kontext zugreifen musst, der nach Beenden der App weg ist, stürzt Dir Dein Service logischerweise ab.


    Eine Mischung aus "works as intended" und "you're doing it wrong"


    Davon ab habe ich den Sinn dahinter, irgendwas über alle anderen Fenster zeichnen zu wollen, absolut nicht verstanden.
    Insofern gehe ich davon aus, dass Du einem falschen Ansatz hinterher rennst.

    Ich denke, die Frage kann Dir nur Google wirklich beantworten – und wird es vermutlich sein lassen. ;)


    Deshalb meine Vermutung:


    Bestseller sind die meist verkauften Apps. Wenn man Parallelen zu Büchern zieht, dann sind Bestseller die Bücher, die am Häufigsten verkauft werden – egal wie viel Umsatz sie dabei in die Kasse spülen.
    Es wird sich hierbei also höchst wahrscheinlich um die nackten Downloadzahlen = Verkaufszahlen der App handeln. Zumal es den Endkunden auch nichts angeht, welche die umsatzstärksten Apps im Store sind. Hier müssten dann ja auch noch eventuelle Einnahmen aus dem InApp Purchase reinfließen.


    Top Apps… Noch mehr Vermutungen.
    In der Developer Console gibt es neben den Downloadzahlen auch die aktiven Installationen. Ich kann mir durchaus vorstellen, dass diese den Ausschlag für die Bewertung geben. So wird die 1 Millionen mal installierte Taschenlampe nicht zur Top App, wenn sie nach wenigen Stunden wieder runterfliegt – sie also nur von 100 Personen genutzt wird.
    Eine spezielle VoIP App hingegen, die von 350 Personen installiert wurde und von über 300 Personen auch aktiv genutzt wird, liegt dann in der Kategorie 'Tools' weit über der Taschenlampe.

    Ich fürchte, Du hast den Sinn hinter dem Threading nicht verstanden.


    Man benutzt einen Thread, um Arbeit mit den Daten zu erledigen ohne das User Interface zu blockieren.
    Beispielsweise der Bilderdownload in der Facebook App: Obwohl das Bild noch nicht geladen ist, kannst Du weiterhin scrollen und alles bedienen.


    Wenn Du es jetzt schaffst, den Thread auf den UI Thread zu liegen, dann blockierst Du auch den UI Thread.


    Entweder Du willst einen Thread haben. Dann musst Du das ganze so bauen, dass Du an keinen Thread gebunden bist.
    Da Du aber offensichtlich etwas in eine View zeichnen willst, darfst Du keinen Thread benutzen.


    Eventuell könntest Du den Thread durch einen AsyncTask ersetzen.
    Dort bekommst Du regelmäßig Callbacks auf dem UI Thread aufgerufen, in denen Du dann beispielsweise das Neuzeichnen anstoßen könntest.
    Allerdings musst Du penibel darauf aufpassen, dass da keinerlei veränderbare Daten hin und her geschoben werden, da der Hintergrundthread immer weiter läuft und Dir damit permanent die Daten übern Haufen werfen kann.

    Aus welchen Gründen auch immer wird nach 8 bis 10 Minuten Dein Socket geschlossen, weil er in einen Timeout gelaufen ist.


    Ich vermute, dass Du die Socketverbindung öffnest, die Daten abfragst und aus Faulheit oder Unwissenheit den Socket geöffnet lässt.
    Da die nächsten 8 bis 10 Minuten nichts passiert, setzt vermutlich der Server die Socketverbindung einfach zurück.
    Der Client rechnet damit nicht und schmeißt deshalb den Fehler.


    Insofern, wenn Du kein Webbackend nutzen möchtest sondern explizit auf dem Socket arbeiten willst, solltest Du

    • den Socket öffnen, die Kommunikation abschließen und den Socket wieder schließen
      oder
    • in einem fixen Zeitintervall einen Keepalive senden, damit die Verbindung offen bleibt


    Je nachdem, was besser zu Deinem Anwendungsfall passt.

    Du musst in den Recovery Modus des Gerätes gelangen und die Inhalte dieses Zip Files drauf schaufeln.


    Entweder ist das ausreichend, dass Du das auf eine SD Karte packen und von dieser booten kannst, so dass das System komplett neu installiert wird.
    Vielleicht kann das Gerät auch "over the air" Installationen. Dafür würde der Name des Pakets sprechen.
    Oder Du benötigst ein Tool wie dfu-util für die Kommandozeile oder ein Odin/Heimdall Äquivalent für Dein Gerät.


    Ohne Hinweis auf Hersteller und Gerät wirst Du allerdings keine Anleitung für die Möglichkeiten finden.

    Du könntest ja mal das streikende Example verlinken. ;)
    An der Verzeichnisstruktur lässt sich schon ziemlich leicht erkennen, ob es für Android Studio geschrieben wurde.


    //Nachtrag
    Vermutlich handelt es sich um dieses Beispiel:
    http://developer.android.com/s…rlessButtons/project.html


    Ja, ist explizit für Android Studio geschrieben.
    Erkennt der fortgeschrittene Nutzer an der Existenz der build.gradle, der settings.gradle und des gradle Ordners.


    Für weniger fortgeschrittene Nutzer gibt es eine README.txt.