Bir Launcher yazıyorum, sistemden son uygulama/görev listesini temizlemem gerekiyor, "uygulamalarımı son görev listesinde göstermedim", ancak şu an hakkında hiçbir fikrim yok. Yığın akışında arama yaptım ve yalnızca this issue eşleşti, ancak yanıtın hiçbir yardımı yok. Başka bir adam da aynı soruları sordu, Android 4.0'dan gelen RemoveTask'a katıldı. Evet, Android 2.3.7 ve Android 4.0 kaynak kodunu kontrol ettim, tahmin edilen bir turda, ActivityMangerService.Java:Android, çoğu telefondaki Ana ekran düğmesinden alabileceğiniz son görev listesini nasıl temizlerim? Yansıma olası bir yoldur?
final ArrayList<TaskRecord> mRecentTasks = new ArrayList<TaskRecord>();
Ve başka belki yararlı tanım:
public static <T> void clearRecentTaskList(Launcher launcher){
ActivityManager am = (ActivityManager) launcher.getSystemService(Context.ACTIVITY_SERVICE);
Object systemRecentTask = new ArrayList<T>();
Object receiver = null;
Field recentTaskList = null;
Class<?> service = null;
Field self = null;
try {
service = Class.forName("com.android.server.am.ActivityManagerService");
Log.d(LOG_TAG, "clearRecentTaskList, service gotton"+service.getName());
} catch (ClassNotFoundException e2) {
Log.d(LOG_TAG, "clearRecentTaskList, class service not found");
}
try {
self = service.getDeclaredField("mSelf");
} catch (SecurityException e2) {
Log.d(LOG_TAG, "clearRecentTaskList, SecurityException during get mSelf");
} catch (NoSuchFieldException e2) {
Log.d(LOG_TAG, "clearRecentTaskList, NoSuchFieldException during get mSelf");
}
Log.d(LOG_TAG, "clearRecentTaskList, self gotton " + self.toGenericString());
try {
self.setAccessible(true);
receiver = self.get(null);
} catch (IllegalArgumentException e2) {
Log.d(LOG_TAG, "clearRecentTaskList, IllegalArgumentException during use self to get the receiver");
} catch (IllegalAccessException e2) {
Log.d(LOG_TAG, "clearRecentTaskList, IllegalAccessException during use self to get the receiver");
}
if (receiver != null){
Log.d(LOG_TAG, "clearRecentTaskList, receiver is : "+receiver.toString());
} else {
Log.d(LOG_TAG, "clearRecentTaskList, receiver is NULL");
}
try {
recentTaskList = service.getDeclaredField("mRecentTasks");
recentTaskList.setAccessible(true);
Log.d(LOG_TAG, "clearRecentTaskList, recentTaskList gotton"+recentTaskList.toGenericString());
try {
systemRecentTask = recentTaskList.get(receiver);
} catch (IllegalArgumentException e1) {
Log.d(LOG_TAG, "IllegalArgumentException during try to clearRecentTask");
} catch (IllegalAccessException e1) {
Log.d(LOG_TAG, "IllegalAccessException during try to clearRecentTask");
}
Log.d(LOG_TAG, "Try to print the size of recent task: "+((ArrayList<T>) systemRecentTask).size());
} catch (SecurityException e) {
Log.d(LOG_TAG, "SecurityException during try to clearRecentTask");
} catch (NoSuchFieldException e) {
Log.d(LOG_TAG, "NoSuchFieldException during try to clearRecentTask");
}
}
: Java & refelction aşina değilim çünkü ben bir şekilde açık bu liste hakkında yardıma ihtiyacım
static ActivityManagerService mSelf;
public static ActivityManagerService self() {
return mSelf;
}
aşağıda Sesimin kodudur
Bu işlevle, her zaman "NullPointerException" ile tanıştım çünkü alıcı kendiliğinden alınıyor. (Bütün deneyin/catch kaldırırsanız) Ve böyle başka bir yol denedi:
self = service.getDeclaredMethod("mSelf", null);
receiver = self.invoke(null, null); // mSelf is a static method which in ActivityMangerService class
aynı sonucu ben ActivityManagerService örneğini alamayan ve sonra mRecentTasks alamıyorum. Herhangi bir yorum takdir edildi ve "bu listedeki tüm öğeleri nasıl kaldıracağımı" bilmiyorum, ancak başka sorular olabilir.
Teşekkürler.
Ne tür başlatıcı yazdığınızı anlamıyorum ... neden son programları silmelisiniz? Bana sadece bir güvenlik istisnası gibi geliyor ya da en azından Android varsayılan davranışını çok hoş olmayan bir şekilde değiştiriyormuşsunuz gibi geliyor. Örneğin, bir kötü amaçlı yazılım programı kendini gizleyebilir ... – Radu
Uygulamaya açık olmayan API, uygulamanızın _break_'ine gidecek olan her yayınlama/güncelleme ile değişebilir. Kendi iyi uygulama list_ bileşenine sahip ol. –
İnşallah, bu, yalnızca cihaz yazılımı uygulamalarının tutabileceği bir izinle korunmaktadır; – CommonsWare