Handy wird Heiß

  • 10 Antworten
  • Neuester Beitrag
Diskutiere Handy wird Heiß im Android App Entwicklung im Bereich Betriebssysteme & Apps.
S

speedy113

Neues Mitglied
Hallo androidler,

ich bin neu hier und hoffe das ihr mir helfen könnt.

hab im internet auch google schon gesucht aber nicht fündig geworden.

ich hab ein app angefangen zu programmieren welches txt dateien 2 stück und 3 jpg bild dateien von einem ftp server herunterladen soll

das ganze funktioniert auch einwandfrei ohne probleme

nur mein problem ist sobald ich die app auf meinem device/handy starte wird diese ganze heiss nach 1-2-3 minuten

woran könnte das liegen habt ihr dieses problem auch mal gehabt?

vielen dank.
 
A

amfa

Experte
Sowas passiert normalerweise, wenn du irgendwas in einer langen (oder endlos) schleife hast, dann kann die CPU niemals in den "Ruhezustand" übergehen und läuft immer mit vollem takt.

Musst du mal in deinen Quellcode gucken oder den hier posten.
 
S

speedy113

Neues Mitglied
danke erstmal für deine antwort

ich habe zwar schleifen drinn aber sind zählerschleifen
die hören ja normalerweise irgendwann auf oder?

sonst habe ich keine andere while schleife oder so...

kann es eventuell vorkommen dass es an dem connect liegt und disconnect der verbindung mit ftp server ?

im folgenden beispiel lade ich nur das splashscreen herunter

hier mein code:

Code:
public class SplashScreenActivity extends Activity {

    ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash_screen);
        
        iv = (ImageView)findViewById(R.id.picAnfahrt);
        
        iv.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {

                //Intent transferVars = new Intent(SplashScreenActivity.this,MainMenuActivity.class);

                finish();
                //startActivity(transferVars);
            }
        });
        
        
        
        GV.initVars();
        
        
        setPictureOnImageView();
        
        
        if (NetworkAccess.isOnline(getApplicationContext())){
           splashScreenChecker();
        }
        else{
            finish();
        }

        
        //überprüfen ob splashscreen vorhanden auf handy 
        
        //wenn ja anzeigen aufpassen überprrüfung muss 
        //stattfinden ob neue oder alte splash screen kann aber später gemacht werden
        
        //wenn nicht splash screen herunterladen
        
        
    }
    
    private void splashScreenChecker() {
        
        if (GV.checkFileIfExist(GV.mobileClubLocationPath + "splashscreen.jpg")){
            setPictureOnImageView();
        }
        else{
            NetworkAccess.downloadFTP(GV.clubPathOnServer+"splashscreen.jpg",  GV.mobileClubLocationPath + "splashscreen.jpg");
        
            if (GV.checkFileIfExist(GV.mobileClubLocationPath + "splashscreen.jpg")){
                setPictureOnImageView();
            }
        }
        
        checkSplashscreenSize( GV.clubPathOnServer);
        
        if (GV.checkFileLocalAndServerAreTheSame(GV.mobileClubLocationPath + "splashscreen.jpg") == false){
            NetworkAccess.downloadFTP(GV.clubPathOnServer+"splashscreen.jpg",  GV.mobileClubLocationPath + "splashscreen.jpg");
        }
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.splash_screen, menu);
        return true;
    }
    
    public void setPictureOnImageView(){
        GV.log("Bild wird platziert!");
        File imgFile = new  File( GV.mobileClubLocationPath + "splashscreen.jpg" );
        
        GV.log(imgFile.length()+"");
        
        if(imgFile.exists()){
            Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            iv.setImageBitmap(myBitmap);
        }
        imgFile=null;
    }
    

    
    public void checkSplashscreenSize(String dir_path)  
    {  
      try {  
        FTPFile[] ftpFiles =  NetworkAccess.getListOfFiles(dir_path);  
        int length = ftpFiles.length; 
        String[] listContent = new String[length];
        for (int i = 0; i < length; i++) {  
          String name = ftpFiles[i].getName();  
          if (name.equals("splashscreen.jpg")) {  
            Log.i("FILE", "File : " + name);
            GV.fileName=name;
           
            listContent[i] = GV.fileName;
            GV.FileWithPath = (GV.mobileClubLocationPath + GV.fileName);
         
            GV.fileSize=(ftpFiles[i].getSize());
            GV.log(ftpFiles[i].getSize()+"");
            
          }  
          else {  
              GV.log ("Directory : " + name);  
          }  
        }
        ftpFiles = null;
      } catch(Exception e) {  
        e.printStackTrace();  
      }  
    }
}
 
A

amfa

Experte
Könnte interesasnt sein wie viele Dateien er hier findet
int length = ftpFiles.length;

Wenn das schon viele sind könnte da eine relativ lange schleife werden.
Wie oft rufst du denn die Dateien ab?
Wenn du das einmal machst dürfte das Telefon ja nicht heiß werden.
Zumindest seh ich gerade nichts wo es sonst zu problemen diesbzüglich kommen könnte, ist aber auch schon 10 vor 3, da seh ich nicht immer alles ;)
 
S

speedy113

Neues Mitglied
ich bin dankbar dafür dass du dir zeit nimmst

ich bin echt am verzweifeln.

also hab eben getraced und es sind 6 dateien :D

ich versuch grad parallel einzelne code ausschnitte wegzulassen und schritt für schritt freizugeben um zu schauen wann er anfängt warm zu werden.

puhh aber ich fang an zu weinen gleich :((
 
blackfire185

blackfire185

Stammgast
Wäre auch noch interessant welches device du nutzt denn mein Handy wird schneller warm als andere.

Sehe ich das richtig dass du die Files in UI thread runter lädst oder ist es noch zu früh?

Gesendet von meinem LG-P880 mit der Android-Hilfe.de App
 
S

speedy113

Neues Mitglied
hallo blackfire und danke für deine antwort...


ich benutze sgs2 auf dem ich meine apps dann zum antesten deploye.


das mit dem ui thread könntest du recht haben bzw.

mit diesem befehl:

Code:
NetworkAccess.downloadFTP(GV.clubPathOnServer+"splashscreen.jpg",  GV.mobileClubLocationPath + "splashscreen.jpg");
wird eine static methode in einer static klasse aufgerufen diese methode

ruft dann zuerst eine methode auf connect ftp

nach dem connect wird die datei mit dem 1.parameter pfad heruntergeladen und in den pfad im 2. parameter lokal gespeichert.

nachdem download wird die verbindung mit einem disconnect methode hoffentlich geschlossen.

ist dieser vorgang trotzdem ein uithread?

wie mache ich es richtig?

vielen dank
 
blackfire185

blackfire185

Stammgast
https://www.android-hilfe.de/forum/android-app-entwicklung.9/haeufige-fehler-ursachen-und-loesungen-keine-diskussionen.348054.html

Herausfinden kannst du das einfach, indem du entweder schaust ob du Android > 3.0 verwendest (wenn ja und es nicht abstürzt ist es ok, siehe link) oder du gehst einfach mal in das mobile Netz (am besten 2g) und lädst die Dateien runter. Wenn du nicht mehr mit Views interagieren kannst und nach 5s eine ANR kommt, dann ist es im UI Thread.

Aber das war nur nebenbei, denn eigentlich sollte es nicht heiß werden wenn alles im UI Thread läuft.

Ich kann es eigentlich fast nicht glauben, denn eine Datei herunterzuladen ist jetzt nicht soo prozessorlastig.
Sicher dass nicht irgendwas im Hintergund noch läuft?? Kommt es häufiger vor, dass dein Handy auch bei nichtbenutzen der App sondern bei alltäglichen Aufgaben heiß wird (außer beim Spielen)?
SGS2 wird heiß
Interessant wäre auch, wenn du mal die CPU Auslastung protokollieren könntest, oder auch nur nachschauen könntest.

Und am Besten, du testest es evtl. mal mit einem anderen Handy um sicherzugehen, dass es nicht an einer anderen App o.Ä. liegt (wenn du willst kann ich es auf meinem LG optimus 4xHD testen -->PN).

Gruß
 
S

speedy113

Neues Mitglied
danke für deine antwort :)

zu nr. 1: ich entwickle bzw. builde meine app mit frodo 2.2 version damit ich soviele handynutzer ansprechen kann. die dateien kann ich herunterladen das ist nicht das problem

zu nr. 2: guter ansatz ich weis was du meinst aber muss ich leider nein sagen das handy wird im normalen zustand wenn ich whatsapp oder sonst was machen nicht heiss. ich merke das brutal sofort sobald ich meine app starte das ist schon jetzt wie ein vorurteil...oh man ich starte jetzt meine app nur um es zu testen wird schon wieder heiss das gerät. so in der art :)

gibt es ein befehl womit ich die auslastung ins logschreiben kann ? in einer schleife oder so?

ich hab noch ein sony xperia z ich versuch es mal damit.

----------------------

ich hab mal angefangen mein code immer schritt für schritt freizuschalten um zu sehen ob er schon bei der kleinsten befehlsausführung schon heiss wird.

festgestellt habe ich dass es unter anderem mit diesem befehl heiss wird nur wenn ich diese ausführe:

Code:
 NetworkAccess.isOnline(getApplicationContext())
daraus folgt diese codeausschnitt:



Code:
    private static Context _context;

    private static boolean isConnectingToInternet(){
        ConnectivityManager connectivity = (ConnectivityManager) _context.getSystemService(Context.CONNECTIVITY_SERVICE);
          if (connectivity != null)
          {
              NetworkInfo[] info = connectivity.getAllNetworkInfo();
              if (info != null)
                  for (int i = 0; i < info.length; i++)
                      if (info[i].getState() == NetworkInfo.State.CONNECTED)
                      {
                          return true;
                      }
 
          }
          return false;
    }
	
    public static boolean isOnline(Context pContext) {
    	
    	_context = pContext;

    	Boolean isInternetPresent = isConnectingToInternet(); // true or false
    	
    	if (isInternetPresent==false){
    		Toast.makeText(_context, "Verbindung zum Server fehlgeschlagen! Keine Internetverbindung!" , Toast.LENGTH_LONG).show();
    	}
    	
    	_context = null;
    	return isInternetPresent;
    }
selbst hier wird der gerät heiss.

vielen dank.
 
blackfire185

blackfire185

Stammgast
Ersetz den Teil mal durch Connecting to the Network | Android Developers:
Code:
ConnectivityManager connMgr = (ConnectivityManager) 
        getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    if (networkInfo != null && networkInfo.isConnected()) {
        // fetch data
    } else {
        // display error
    }
Nur testweise, sollte eigentlich keinen Unterschied machen.
Wenn es dabei auch warm wird, weiß ich auch nicht weiter. Wie sah es auf deinem anderen Handy aus?

Prozessorauslastung kannst du mit Apps protokollieren, weiß nicht mit welcher, musst mal googeln!

zu 1.
Es geht um die OS Version auf dem Gerät, nicht mit welcher Version du es entwickelst, da erst ab 3.0 das Verbot von Netzwerkoperation im UI-Thread eingeführt wurde
Wenn du auf deinem SG2 Android 2.2 installiert hast, bekommst du keine NetworkOnMainThread Exception, erst in Android 3.x und 4.x!
 
S

speedy113

Neues Mitglied
danke für deine antwort :)

hab das so umgesetzt es wurde trotzdem heiss :(

aber das sony xperia z wurde nicht heiss
das ist auf normaler temperatur geblieben...

wie soll ich nun weiterfahren?

soll ich static methoden benutzen oder doch mit objecten hantieren?

bei objecten kann ich mir ja sicher sein wenn ich sie auf null setzte dass diese nicht mehr existieren und auch nicht mehr im prozess sein können?

vielen dank.
 
Ähnliche Themen - Handy wird Heiß Antworten Datum
5