FelixL
Ehrenmitglied
- 821
Ich baue gerade an einem App-Switcher, der meiste Teil ist momentan von einem Proof of Concept übernommen (Code hier: ruqqq's ActivityThumbnailPrototype-Application at master - GitHub).
Allerdings bekomme ich jetzt folgende Fehlermeldung:
Im Internet finde ich extrem wenig zu Failed Binder Transaction, aber es gibt Hinweise darauf das das mit großen Bildern zu tun hat.
Allerdings tritt der Fehler bei mir nur auf wenn ich
a) den Bildschirm drehe während die App offen ist oder
b) die App über den Home-Button verlasse, den Bildschirm drehe und dann wieder öffne.
Er tritt nicht auf wenn ich
c) die App über den Back-Knopf verlasse, den Bildschirm drehe und dann wieder öffne oder
d) den Bildschirm nicht drehe und die App öffne oder schließe.
Nachschlag: Okay, jetzt ist egal was ich mache, der Fehler kommt immer
Mein Sourcecode:
Ach ja, Bitmap b = rti.thumbnail ist 320 * 320 Pixel groß.
Und entschuldigt bitte die Unordnung
Allerdings bekomme ich jetzt folgende Fehlermeldung:
Code:
09-25 17:55:17.292: INFO/ActivityManager(356): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.felixl.aswitcher/.MainActivity bnds=[3,138][77,217] }
09-25 17:55:17.342: DEBUG/ActivityThumbnailPrototype(3828): onCreate Anfang
09-25 17:55:17.352: DEBUG/ActivityThumbnailPrototype(3828): [com.felixl.aswitcher.MainActivity, com.fede.launcher.Launcher]
09-25 17:55:17.352: DEBUG/ActivityThumbnailPrototype(3828): onCreate geschafft
09-25 17:55:17.362: DEBUG/ActivityThumbnailPrototype(3828): onResume 0
09-25 17:55:17.362: DEBUG/ActivityThumbnailPrototype(3828): onResume 1
09-25 17:55:17.382: DEBUG/ActivityThumbnailPrototype(3828): android.app.ActivityManager@44101d68
09-25 17:55:17.462: ERROR/JavaBinder(3828): !!! FAILED BINDER TRANSACTION !!!
09-25 17:55:17.462: DEBUG/ActivityThumbnailPrototype(3828): onResume 2
09-25 17:55:17.462: DEBUG/ActivityThumbnailPrototype(3828): []
Im Internet finde ich extrem wenig zu Failed Binder Transaction, aber es gibt Hinweise darauf das das mit großen Bildern zu tun hat.
Allerdings tritt der Fehler bei mir nur auf wenn ich
a) den Bildschirm drehe während die App offen ist oder
b) die App über den Home-Button verlasse, den Bildschirm drehe und dann wieder öffne.
Er tritt nicht auf wenn ich
c) die App über den Back-Knopf verlasse, den Bildschirm drehe und dann wieder öffne oder
d) den Bildschirm nicht drehe und die App öffne oder schließe.
Nachschlag: Okay, jetzt ist egal was ich mache, der Fehler kommt immer
Mein Sourcecode:
Code:
package com.felixl.aswitcher;
import static android.util.Log.d;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Intent;
//import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Bundle;
//import android.view.View;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
public static String LOG_TAG = "ActivityThumbnailPrototype";
public ActivityManager am;
LinearLayout myLL;
List<ActivityManager.RunningTaskInfo> lru;
ArrayList<String> excludeThis;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
d(LOG_TAG, "onCreate Anfang");
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myLL = (LinearLayout) findViewById(R.id.llImage_test);
am = (ActivityManager) this.getSystemService( ACTIVITY_SERVICE );
excludeThis = new ArrayList<String>();
excludeThis.add("com.felixl.aswitcher.MainActivity");
excludeThis.add("com.fede.launcher.Launcher");
d(LOG_TAG, excludeThis.toString());
d(LOG_TAG, "onCreate geschafft");
}
@Override
public void onResume(){
d(LOG_TAG, "onResume 0");
super.onResume();
myLL.removeAllViews();
d(LOG_TAG, "onResume 1");
// Faruq: Get running tasks
d(LOG_TAG, am.toString());
lru = am.getRunningTasks(8);
d(LOG_TAG, "onResume 2");
d(LOG_TAG, lru.toString());
for (int i = 0; i < lru.size() && myLL.getChildCount() < 5; i++){//ActivityManager.RunningTaskInfo rti : lru) {
// Faruq: This will print out the last tasks Class Names
d(LOG_TAG, "onResume 2.5");
ActivityManager.RunningTaskInfo rti = lru.get(i);
String rtiName = rti.topActivity.getClassName();
d(LOG_TAG, "LRU: "+ rtiName);
if (!excludeThis.contains(rtiName)){
// Faruq: The code that requires magic modifications
Bitmap b = rti.thumbnail;
if (b != null) {
d(LOG_TAG, " Bitmap found: "+b);
// Faruq: Create ImageView object and set the content to the bitmap
ImageView iv = new ImageView(this);
ViewGroup.MarginLayoutParams mlp = new ViewGroup.MarginLayoutParams(b.getWidth(), b.getHeight());
mlp.setMargins(10, 10, 10, 10);
iv.setLayoutParams(mlp);
iv.setImageBitmap(b);
iv.setId(i);
iv.setOnClickListener(myClickListener);
// Faruq: Add the iv to the Layout we have
myLL.addView(iv);
}
else {
d(LOG_TAG, " Bitmap is null");
}
}
d(LOG_TAG, "onResume 3");
}
}
OnClickListener myClickListener = new OnClickListener() {
@Override
public void onClick(View v) {
ActivityManager.RunningTaskInfo clickedRti = lru.get(v.getId());
Intent i = new Intent(Intent.ACTION_MAIN); i.setComponent(clickedRti.baseActivity);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT).addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);
}
};
}
Ach ja, Bitmap b = rti.thumbnail ist 320 * 320 Pixel groß.
Und entschuldigt bitte die Unordnung