2016-03-29 11 views
1

Das ist eine komische Frage, aber ich brauche das für mein Projekt. Ich versuche, „out of memory“ Effekt zu simulieren, indem es die Aktivität in seinem eigenen onCreate Aufruf (dies nennt die Aktivität unendlich), dieWie man ein Gerät einfrieren lässt?

// launch this activity again and again making the device freeze and 
    // reboot 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.setComponent(new ComponentName("com.android.systemmanager", 
      "com.android.systemmanager.FreezeScreen1")); 
    startActivity(intent); 

perfekt funktioniert gut, aber das Problem hier ist, dass ich nicht will um irgendwelche Klassen zu benutzen. Ich möchte dies stattdessen im onReceive meines Broadcast Receivers tun. Wie kann ich dies erreichen, da es keine Klassen zum Anrufen gibt?

Gibt es eine andere Methode, um das Gerät einzufrieren?

Ich benutze auch AlarmManager, um meine onReceive jede Sekunde aufzurufen. Dies würde dazu beitragen, den Gefrierprozess

+1

Erstellen von "Bitmaps" in einer Schleife funktioniert. –

+0

Erhalten Sie 10 wirklich große Bilder, die 3 MB groß sind. Verwenden Sie sie in der Rahmenanimation. Es wird OutOfMemory-Fehler beim Erstellen des Animationsobjekts auslösen. –

+0

Oder einfach nur Arrays von 1 Millionen ganzen Zahlen (4 MB auf einmal essen). Behalte einen Hinweis auf sie, damit sie nicht als Müll gesammelt werden können. –

Antwort

0

Eine Lösung beschleunigen könnte dies sein:

@Override 
public void onReceive(Context context, Intent intent) { 
    ArrayList<Bitmap> bitmapArray = new ArrayList<Bitmap>(); 
    final int TOTAL_BITMAPS = 1000; //any large number would work. 
    for(int i=0; i<TOTAL_BITMAPS; i++){ 
      Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.large_image); // load a large bitmap from drawable.. 
      bitmapArray.add(bitmap); 
    } 
} 
+0

hey, wenn die App sich schließt, wird meine App abgefangen. Wird es nahe kommen? – Emily

+0

App wird von 'Android'-System aufgrund eines nicht ausreichenden Speicherfehlers geschlossen. Wenn Sie jedoch ein neues Ereignis senden, wird es erneut ausgeführt. –

0

diese Methode erstellen

private void stackOverFlow() 
{ 
    this.stackOverFlow(); 
} 

Dann ist diese Methode aufrufen, wenn Sie Ihre App einfrieren möchten.

Verwandte Themen