App stürzt immer ab (Activity is not responding)

A

adri

Neues Mitglied
0
Hallo zusammen,

meine kleine App, die ich gerade programmiere, stürzt (in der virtuellen Umgebung) mit o.g. Fehlermeldung ab. Ich habe es mit 1.6, 2.3.3 und 3.0 versucht. Vorrangig programmiere ich für 2.3.3.

Die Applikation soll momentan nur einen JSON aus dem Internet holen. Mehr nicht. Aber soweit kommt es gar nicht.

Das hier ist mein Main:
Code:
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //Netzwerkkonnektivität prüfen
    if(isInternetOn()==false)
        showToaster("Keine Netzwerkverbindung");
    else
        Startseite_aufbauen();
}
Ich habe festgestellt, dass die Funktion Startseite_aufbauen() nicht aufgerufen wird, selbst wenn das Internet angeschaltet ist (Taste F8).
An der isInternetOn()-Funktion habe ich nichts geändert. Diese hat immer funktioniert, und tut es auch jetzt noch. Wenn ich Internet ausschalte, erscheint der Toaster auch.

Ich habe zuletzt etwas an der AndroidManifest.xml geändert (Internet-Permissions eingefügt). Diese sieht jetzt so aus:

Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="de.adri.com"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-sdk android:minSdkVersion="4" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".Starter" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".QuickPrefsActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
Nach der offiziellen Dokumentation stimmt die Formatierung der xml.
Laut LogCat in Eclipse verbraucht das Programm 36% CPU.
Wo also könnte das Problem liegen?

Vielen Dank schonmal im Voraus.
 
naja wenn du in Startseite_aufbauen() daten aus dem netzwerk holst, hast du dort wohl keinen thread.

Deine Stichwort dazu sind:
ANR, Threads, Tasks,

Und ganz wichtig: Java Coding Standard. Sorry aber
Startseite_aufbauen() da wird mir übel :)
 
Wie gesagt, Startseite_aufbauen() wird gar nicht erst aufgerufen. Schon die erste Aktion in der Methode wird nicht ausgeführt, da kann ich reinschreiben was ich möchte.
 
= >logcat
 
Hier bitte. Das ist nur der Ausschnitt von unten her, seit dem ich das Projekt habe kompilieren lassen. Vielleicht könnt ihr daraus was lesen, ich jedenfalls kann es nicht.
Wusste nicht, wie ich das farbig extrahiere, das erleichtert nämlich die Lesbarkeit. Sorry.

Code:
12-14 18:43:00.074: W/ActivityManager(69): finishReceiver called but no pending broadcasts
12-14 18:43:00.604: D/AndroidRuntime(299): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
12-14 18:43:00.604: D/AndroidRuntime(299): CheckJNI is ON
12-14 18:43:01.664: D/AndroidRuntime(299): Calling main entry com.android.commands.pm.Pm
12-14 18:43:01.735: I/ActivityManager(69): Start proc com.android.defcontainer for service com.android.defcontainer/.DefaultContainerService: pid=307 uid=10003 gids={1015, 2001}
12-14 18:43:02.314: D/dalvikvm(307): GC_EXPLICIT freed 293K, 54% free 2568K/5511K, external 1625K/2137K, paused 87ms
12-14 18:43:02.474: W/ActivityManager(69): No content provider found for: 
12-14 18:43:02.494: W/ActivityManager(69): No content provider found for: 
12-14 18:43:02.538: D/PackageParser(69): Scanning package: /data/app/vmdl-1085806990.tmp
12-14 18:43:02.813: I/PackageManager(69): Removing non-system package:de.adri.com
12-14 18:43:02.824: I/ActivityManager(69): Force stopping package de.adri.com uid=10034
12-14 18:43:03.105: D/PackageManager(69): Scanning package de.adri.com
12-14 18:43:03.105: I/PackageManager(69): Package de.adri.com codePath changed from /data/app/de.adri.com-1.apk to /data/app/de.adri.com-2.apk; Retaining data and using new
12-14 18:43:03.114: I/PackageManager(69): Unpacking native libraries for /data/app/de.adri.com-2.apk
12-14 18:43:03.134: D/installd(34): DexInv: --- BEGIN '/data/app/de.adri.com-2.apk' ---
12-14 18:43:03.416: D/dalvikvm(317): DexOpt: load 53ms, verify+opt 64ms
12-14 18:43:03.434: D/installd(34): DexInv: --- END '/data/app/de.adri.com-2.apk' (success) ---
12-14 18:43:03.444: W/PackageManager(69): Code path for pkg : de.adri.com changing from /data/app/de.adri.com-1.apk to /data/app/de.adri.com-2.apk
12-14 18:43:03.444: W/PackageManager(69): Resource path for pkg : de.adri.com changing from /data/app/de.adri.com-1.apk to /data/app/de.adri.com-2.apk
12-14 18:43:03.444: D/PackageManager(69):   Activities: de.adri.com.Starter de.adri.com.QuickPrefsActivity
12-14 18:43:03.454: I/ActivityManager(69): Force stopping package de.adri.com uid=10034
12-14 18:43:03.674: I/installd(34): move /data/dalvik-cache/data@app@de.adri.com-2.apk@classes.dex -> /data/dalvik-cache/data@app@de.adri.com-2.apk@classes.dex
12-14 18:43:03.674: D/PackageManager(69): New package installed in /data/app/de.adri.com-2.apk
12-14 18:43:03.905: I/ActivityManager(69): Force stopping package de.adri.com uid=10034
12-14 18:43:04.044: D/dalvikvm(138): GC_EXPLICIT freed 10K, 51% free 2920K/5895K, external 4652K/5293K, paused 100ms
12-14 18:43:04.206: D/dalvikvm(187): GC_EXPLICIT freed 290K, 52% free 2772K/5767K, external 1625K/2137K, paused 226ms
12-14 18:43:04.224: I/dalvikvm(69): Jit: resizing JitTable from 512 to 1024
12-14 18:43:04.366: I/ActivityManager(69): Start proc com.svox.pico for broadcast com.svox.pico/.VoiceDataInstallerReceiver: pid=318 uid=10009 gids={}
12-14 18:43:04.464: W/RecognitionManagerService(69): no available voice recognition services found
12-14 18:43:04.914: I/ActivityThread(318): Pub com.svox.pico.providers.SettingsProvider: com.svox.pico.providers.SettingsProvider
12-14 18:43:05.384: D/dalvikvm(69): GC_CONCURRENT freed 1311K, 49% free 4218K/8199K, external 4373K/5573K, paused 11ms+13ms
12-14 18:43:05.624: D/dalvikvm(69): GC_EXPLICIT freed 49K, 50% free 4169K/8199K, external 4180K/5220K, paused 121ms
12-14 18:43:05.634: I/installd(34): unlink /data/dalvik-cache/data@app@de.adri.com-1.apk@classes.dex
12-14 18:43:05.676: D/AndroidRuntime(299): Shutting down VM
12-14 18:43:05.714: D/dalvikvm(299): GC_CONCURRENT freed 101K, 72% free 295K/1024K, external 0K/0K, paused 2ms+1ms
12-14 18:43:05.723: I/AndroidRuntime(299): NOTE: attach of thread 'Binder Thread #3' failed
12-14 18:43:05.723: D/jdwp(299): Got wake-up signal, bailing out of select
12-14 18:43:05.734: D/dalvikvm(299): Debugger has detached; object registry had 1 entries
12-14 18:43:06.643: D/AndroidRuntime(331): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
12-14 18:43:06.643: D/AndroidRuntime(331): CheckJNI is ON
12-14 18:43:07.664: D/AndroidRuntime(331): Calling main entry com.android.commands.am.Am
12-14 18:43:07.723: I/ActivityManager(69): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=de.adri.com/.Starter } from pid 331
12-14 18:43:07.804: I/ActivityManager(69): Start proc de.adri.com for activity de.adri.com/.Starter: pid=339 uid=10034 gids={3003}
12-14 18:43:07.814: D/AndroidRuntime(331): Shutting down VM
12-14 18:43:07.845: D/dalvikvm(331): GC_CONCURRENT freed 102K, 69% free 320K/1024K, external 0K/0K, paused 2ms+2ms
12-14 18:43:07.864: I/AndroidRuntime(331): NOTE: attach of thread 'Binder Thread #3' failed
12-14 18:43:07.944: D/jdwp(331): Got wake-up signal, bailing out of select
12-14 18:43:07.944: D/dalvikvm(331): Debugger has detached; object registry had 1 entries
12-14 18:43:17.794: W/ActivityManager(69): Launch timeout has expired, giving up wake lock!
12-14 18:43:18.838: W/ActivityManager(69): Activity idle timeout for HistoryRecord{4064ea20 de.adri.com/.Starter}
12-14 18:43:31.104: I/InputDispatcher(69): Application is not responding: AppWindowToken{406bb090 token=HistoryRecord{4064ea20 de.adri.com/.Starter}}.  5054.0ms since event, 5053.5ms since wait started
12-14 18:43:31.104: I/WindowManager(69): Input event dispatching timed out sending to application AppWindowToken{406bb090 token=HistoryRecord{4064ea20 de.adri.com/.Starter}}
12-14 18:43:31.164: I/Process(69): Sending signal. PID: 339 SIG: 3
12-14 18:43:31.164: I/dalvikvm(339): threadid=4: reacting to signal 3
12-14 18:43:31.184: I/dalvikvm(339): Wrote stack traces to '/data/anr/traces.txt'
12-14 18:43:31.193: I/Process(69): Sending signal. PID: 69 SIG: 3
12-14 18:43:31.193: I/dalvikvm(69): threadid=4: reacting to signal 3
12-14 18:43:31.294: I/dalvikvm(69): Wrote stack traces to '/data/anr/traces.txt'
12-14 18:43:31.294: I/Process(69): Sending signal. PID: 127 SIG: 3
12-14 18:43:31.294: I/dalvikvm(127): threadid=4: reacting to signal 3
12-14 18:43:31.334: I/dalvikvm(127): Wrote stack traces to '/data/anr/traces.txt'
12-14 18:43:31.334: I/Process(69): Sending signal. PID: 134 SIG: 3
12-14 18:43:31.346: I/dalvikvm(134): threadid=4: reacting to signal 3
12-14 18:43:31.365: I/dalvikvm(134): Wrote stack traces to '/data/anr/traces.txt'
12-14 18:43:32.185: D/dalvikvm(69): GC_EXPLICIT freed 353K, 48% free 4269K/8199K, external 3125K/3903K, paused 117ms
12-14 18:43:32.924: E/ActivityManager(69): ANR in de.adri.com (de.adri.com/.Starter)
12-14 18:43:32.924: E/ActivityManager(69): Reason: keyDispatchingTimedOut
12-14 18:43:32.924: E/ActivityManager(69): Load: 3.57 / 1.48 / 0.54
12-14 18:43:32.924: E/ActivityManager(69): CPU usage from 8267ms to 0ms ago:
12-14 18:43:32.924: E/ActivityManager(69):   0.7% 69/system_server: 0.2% user + 0.4% kernel / faults: 1 minor
12-14 18:43:32.924: E/ActivityManager(69):   0.2% 127/com.android.phone: 0.1% user + 0.1% kernel
12-14 18:43:32.924: E/ActivityManager(69):   0.2% 134/com.android.systemui: 0.1% user + 0.1% kernel / faults: 4 minor
12-14 18:43:32.924: E/ActivityManager(69):   0% 66/logcat: 0% user + 0% kernel
12-14 18:43:32.924: E/ActivityManager(69): 1.8% TOTAL: 0.7% user + 1.1% kernel
12-14 18:43:32.924: E/ActivityManager(69): CPU usage from 1101ms to 1730ms later:
12-14 18:43:32.924: E/ActivityManager(69):   9.5% 69/system_server: 6.3% user + 3.1% kernel / faults: 1 minor
12-14 18:43:32.924: E/ActivityManager(69):     11% 100/InputDispatcher: 7.9% user + 3.1% kernel
12-14 18:43:32.924: E/ActivityManager(69):     1.5% 77/SurfaceFlinger: 1.5% user + 0% kernel
12-14 18:43:32.924: E/ActivityManager(69): 33% TOTAL: 23% user + 9.5% kernel
12-14 18:43:32.954: I/InputDispatcher(69): Dropping event because the pointer is not down.
12-14 18:43:35.164: W/ActivityManager(69):   Force finishing activity de.adri.com/.Starter
12-14 18:43:35.176: I/ActivityManager(69): Killing de.adri.com (pid=339): user's request
12-14 18:43:35.185: I/Process(69): Sending signal. PID: 339 SIG: 9
12-14 18:43:35.224: I/ActivityManager(69): Process de.adri.com (pid 339) has died.
12-14 18:43:36.084: W/InputManagerService(69): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@405cfb60
 
Es kann natürlich auch sein, dass IsInternetOn schon networking machen will und blockt.
 
DieGoldeneMitte schrieb:
Es kann natürlich auch sein, dass IsInternetOn schon networking machen will und blockt.

gut möglich, aber keiner kann hellsehen :)

ist wohl streng geheimer code :D
 
Na schön, hier bitte.

Ich bin mir bewusst, dass es wohl in Startseite_aufbauen() weitere Fehler gibt. Die behebe ich hinterher, wenn ich dieses momentane Problem in den Griff bekommen habe.


Code:
package de.adri.com;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.widget.ArrayAdapter;
import android.widget.Toast;

public class Starter extends Activity{
    /** Called when the activity is first created. */

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        System.setProperty("http.proxyHost", "...");
        System.setProperty("http.proxyPort", "3128");
        System.setProperty("http.proxyUser", "...");
        System.setProperty("http.proxyPassword", "..."); 

        //Netzwerkkonnektivität prüfen
        if(isInternetOn()==false)
            showToaster("Keine Netzwerkverbindung");
        else
            Startseite_aufbauen();
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }

    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.preferences:
            startActivity(new Intent(this, QuickPrefsActivity.class));
            return true;
        case R.id.help:
            
            return true;
        case R.id.refresh:
            if(isInternetOn()==false)
                showToaster("Keine Netzwerkverbindung");
            else
                Startseite_aufbauen();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
    
    
    public final void showToaster(String meldung)
    {
        Toast.makeText(getBaseContext(), meldung, Toast.LENGTH_LONG).show();
    }
    
    public final boolean isInternetOn() {
        showToaster("internet");
        ConnectivityManager connec =  (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED ||
        connec.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTING ||
        connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTING ||
        connec.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED )
        {
            return true;
        }
        else if ( connec.getNetworkInfo(0).getState() == NetworkInfo.State.DISCONNECTED ||
                  connec.getNetworkInfo(1).getState() == NetworkInfo.State.DISCONNECTED  )
        {
            return false;
        }

        return false;
    }
    
    public void Startseite_aufbauen()
    { showToaster("startseite_aubauen");
        String readJSON = readJSON();
        try {
            JSONArray jsonArray = new JSONArray(readJSON);
            for (int i = 0; i < jsonArray.length(); i++) {
                JSONObject jsonObject = jsonArray.getJSONObject(i);
                showToaster(jsonObject.getString("text"));
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public String readJSON()
    {
        StringBuilder builder = new StringBuilder();
        HttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet("http://search.twitter.com/search.json?q=android");
        
        try {
            HttpResponse response = client.execute(httpGet);
            StatusLine statusLine = response.getStatusLine();
            int statusCode = statusLine.getStatusCode();
            showToaster(Integer.toString(statusCode));
            if (statusCode == 200) {
                HttpEntity entity = response.getEntity();
                InputStream content = entity.getContent();
                BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                String line;
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }
            } else {
                showToaster("Failed to download file");
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        
        return builder.toString();
        
    }

}
 
wirst dann wohl mal durchdebuggen müssen um zu sehen wo genau es hakt.

permissions hast gesetzt ?
 
Also ich habe den Fehler gefunden, weiß aber nicht wie ich ihn bewerkstellige.

Dass das Programm nicht reagiert, liegt daran, dass es noch im Internet nach der angegebenen Adresse sucht. Lässt man den Emulator für ein paar Minuten unangetastet, lädt die Startseite doch noch, allerdings steht im Logcat dann auch ein Timeout.

Ich sitze hier hinter einem Proxy in einer Domäne. Mein Account hat natürlich Internetberechtigungen auf dem Proxy.
In meinem Code seht ihr, dass ich oben schon an den Proxy gedacht habe. Die eingegebenen Daten funktionieren aber nicht, obwohl sie definitiv richtig sind.
Dann habe ich die Tipps hier beherzigt, aber das brachte meine App noch nicht zum reagieren.
Die Adresse wird aber zu einer IP aufgelöst, DNS scheint also zu klappen:
12-16 11:19:22.424: W/System.err(412): org.apache.http.conn.ConnectTimeoutException: Connect to /199.59.148.201:80 timed out

Komischerweise bekomme ich im Browser im Emulator keine Eingabeaufforderung für den Proxy, obwohl ich meinen Usernamen und Passwort nicht systemweit eingetragen habe (nur den Servernamen). Da wird es wohl so etwas wie "Pass-Through-Authentication" geben.
Nunja, es muss doch möglich sein, meine App über den Proxy aufs Internet zugreifen lassen zu können...
 
Zuletzt bearbeitet:
an threading gedacht ?
 
wie du siehst, nein. Aber das löst mein Problem mit dem Proxy nicht.
Ich hab das ganze jetzt in einen Thread gepackt (habe nur noch Probleme, dort einen Return einzubauen, denn das braucht meine Funktion ja), damit läuft die App auch flüssig, aber der Timeout ist natürlich immer noch da.

Code:
    public String readJSON()
    {
        Thread t = new Thread()
        {
            StringBuilder builder = new StringBuilder();
            public void run()
            {
                try
                {
                    HttpClient client = new DefaultHttpClient();
                    HttpGet httpGet = new HttpGet("http://search.twitter.com/search.json?q=android");
                    HttpResponse response = client.execute(httpGet);
                    StatusLine statusLine = response.getStatusLine();
        
                    int statusCode = statusLine.getStatusCode();
                    showToaster(Integer.toString(statusCode));
                    if (statusCode == 200) {
                        HttpEntity entity = response.getEntity();
                        InputStream content = entity.getContent();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(content));
                        String line;
                        while ((line = reader.readLine()) != null) {
                            builder.append(line);
                        }
                    } else {
                        showToaster("Failed to download file");
                    }
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
                String ret = builder.toString();
            }
        };
        t.start();
        
        return "yes";
    }
 
ja dein timeout wird nichts mit dem thread zu tun haben, aber mit dem ursprünglichen problem (acitivty is not responding)
 
Mit dem Timeout bist du in bester Gesellschaft. Das Problem hat auch der Android Market. Auch er kommt bei ProxyAuth nicht durch, wenn man nicht mit dem Browser den Login am Proxy manuell ausführt.
 

Ähnliche Themen

S
Antworten
8
Aufrufe
482
swa00
swa00
Chrilos
Antworten
9
Aufrufe
569
koje71
koje71
R
  • Robby1950
2
Antworten
23
Aufrufe
956
Robby1950
R
Zurück
Oben Unten