1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Taskmanager

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von mkl, 11.12.2011.

  1. mkl, 11.12.2011 #1
    mkl

    mkl Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    316
    Erhaltene Danke:
    33
    Registriert seit:
    09.01.2011
    Hi Leute,

    ich muss für mein Studienfach Betriebssysteme eine App entwickeln, da ich das Thema Android App-Entwicklung gewählt habe. Nun wollte ich quasie einen primitiven Taskmanager bauen, da es irg. mit Betriebssysteme zu tun haben soll... Das was ich unter developer.android.com gefunden habe an API-Dokumentation, SampleCodes war jedoch ernüchternd :( Entweder ich bin zu doof das zu suchen oder es gibt wirklich keine SampleCodes dazu!

    Bisher bekomme ich eine unformatierte Liste mit den angeblich laufenden Prozessen ob das wirklich alle sind kann ich nicht sagen... Außerdem gebe ich mir zusätzlich noch die pid (Prozess ID) aus mit welcher ich versuche die Apps zu killen... Leider weiß ich nicht genau wie ich die Apps nun tatsächlich killen kann! Ob es reicht mit einem liste.remove(pid) und somit die App zum killen freigeben wird oder ob ich dafür mehr machen muss...

    Hier mal der Code den ich mir irg. zusammengebastelt hab (Try and Error)

    Code:
    package de.notionsfactory.MemoryInfo;
    
    import java.util.List;
    import java.util.ListIterator;
    import android.app.ActivityManager;
    import android.app.ActivityManager.MemoryInfo;
    import android.app.ActivityManager.RunningAppProcessInfo;
    import android.app.Activity;
    import android.os.Bundle;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import android.view.View;
    import android.view.View.OnClickListener;
    
    public class MemoryInfoActivity extends Activity implements OnClickListener {
    	
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);        
            
            ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);
            MemoryInfo memoryInfo = (MemoryInfo) new ActivityManager.MemoryInfo();
            activityManager.getMemoryInfo(memoryInfo);
            List<RunningAppProcessInfo> mylist = activityManager.getRunningAppProcesses();
            ListIterator<RunningAppProcessInfo> iti = mylist.listIterator(BIND_AUTO_CREATE);
            
            Button killit = (Button) findViewById(R.id.kill_button);
            killit.setOnClickListener(this);
            Button refreshit = (Button) findViewById(R.id.refresh);
            refreshit.setOnClickListener(this);
            
            String ausgabe = null;
            TextView my1 = (TextView) findViewById(R.id.prozesse);
            
            for(;iti.hasNext();)
            {
            	ausgabe += iti.next().processName;
            	ausgabe += "  ";
            	ausgabe += String.valueOf(iti.next().pid);
            	ausgabe += "\n";
            }
    
            my1.setText(ausgabe);
    		
            
            
        }
    
    	public void onClick(View v) {
    		
    		if(v.getId() == R.id.kill_button)
    		{
    			ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);
    	        MemoryInfo memoryInfo = (MemoryInfo) new ActivityManager.MemoryInfo();
    	        activityManager.getMemoryInfo(memoryInfo);
    	        List<RunningAppProcessInfo> mylist = activityManager.getRunningAppProcesses();
    	        
    	        EditText userinput = (EditText) findViewById(R.id.id_input);
    	        mylist.remove(userinput.getText());
    		}
    		else if(v.getId() == R.id.refresh)
    		{
    			
    			ActivityManager activityManager = (ActivityManager) getApplicationContext().getSystemService(ACTIVITY_SERVICE);
    	        MemoryInfo memoryInfo = (MemoryInfo) new ActivityManager.MemoryInfo();
    	        activityManager.getMemoryInfo(memoryInfo);
    	        List<RunningAppProcessInfo> mylist = activityManager.getRunningAppProcesses();
    	        ListIterator<RunningAppProcessInfo> iti = mylist.listIterator(BIND_AUTO_CREATE);
    			
    			String ausgabe = null;
    	        TextView my1 = (TextView) findViewById(R.id.prozesse);
    	        
    	        for(;iti.hasNext();)
    	        {
    	        	ausgabe += iti.next().processName;
    	        	ausgabe += "  ";
    	        	ausgabe += String.valueOf(iti.next().pid);
    	        	ausgabe += "\n";
    	        }
    
    	        my1.setText(ausgabe);
    	        
    		}
    	}
    }
    
    Ich hoffe jemand von euch kennt eine Seite wo diese API besser dokumentiert ist bzw. Beispielcode vorhanden ist... Bzw. konkrete Vorschläge und Erklärungen wie ich was machen muss damit die App gekillt wird wären super! Außerdem wäre es genial wenn ich statt dem vollen Prozessname wie z.B. meine App de.notionsfactory.MemoryInfo nur MemoryInfo ausgeben könnte, ohne mir selbst eine Vergleichsfunktion usw. programmieren zu müssen!

    Anbei noch ein Screenshot. Ich zähle auf euch! :)
     

    Anhänge:

  2. swordi, 11.12.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    lol, developer.android.com hat unzählige beispiel und dokumentationen. da bist du dann echt blind :D

    den sample code kannst auch via adt installieren
     
  3. mkl, 11.12.2011 #3
    mkl

    mkl Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    316
    Erhaltene Danke:
    33
    Registriert seit:
    09.01.2011
    Und wie finde ich diese Beispielcodes dann? Also wenn ich nun z.B. die ProcessInfo über die Suche gefunden habe und hier gelandet bin:

    ActivityManager.RunningAppProcessInfo | Android Developers

    Wo finde ich dann dazu SampleCode? Oder muss ich mich mit viel Glück in anderen Bereichen der Seite durchklicken?
     
  4. swordi, 11.12.2011 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    hmm es gibt noch den "tab" resources. das könnte doch was für dich sein.

    oder was hält dich davon ab "android samples" bei google einzugeben ?

    Für Android Entwicklung braucht man sicher vieles, aber Glück gehört nicht dazu :D
     
  5. Fr4gg0r, 12.12.2011 #5
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    Das ist unix.. du kannst du nur Prozesse killen die du selber gestartet hast (und dich selber).
    Nur root kann alle Prozesse killen.
     
  6. mkl, 12.12.2011 #6
    mkl

    mkl Threadstarter Fortgeschrittenes Mitglied

    Beiträge:
    316
    Erhaltene Danke:
    33
    Registriert seit:
    09.01.2011
    Und wie macht es dann die App Advanced TaskManager?
     
  7. Fr4gg0r, 12.12.2011 #7
    Fr4gg0r

    Fr4gg0r App-Anbieter (Werbung)

    Beiträge:
    2,506
    Erhaltene Danke:
    447
    Registriert seit:
    21.12.2009
    http://developer.android.com/reference/android/app/ActivityManager.html#killBackgroundProcesses%28java.lang.String%29

    Die startet wohl services neu..
    Es gibt zwar noch die Methode forceStopPackage(), diese benötigt aber auch eine entsprechende Permission welche du nicht bekommst (Es sei denn du nutzt cyanogenmod).

    Vom android-häcker-weib ;)
     

Diese Seite empfehlen