Taskmanager

M

mkl

Erfahrenes Mitglied
44
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

  • sample.png
    sample.png
    14,6 KB · Aufrufe: 218
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
 
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?
 
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
 
Das ist unix.. du kannst du nur Prozesse killen die du selber gestartet hast (und dich selber).
Nur root kann alle Prozesse killen.
 
Und wie macht es dann die App Advanced TaskManager?
 
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).

[FONT=Courier, Monospaced]Sorry you can't do this. Apps now can only kill processes of other apps
that are in the background. [/FONT]

Vom android-häcker-weib ;)
 

Ähnliche Themen

M
Antworten
2
Aufrufe
1.185
MateUserHHTT
M
H
Antworten
4
Aufrufe
2.139
myeta
myeta
Zurück
Oben Unten