Как программно свернуть приложение для Android? - программирование
Подтвердить что ты не робот

Как программно свернуть приложение для Android?

Я хочу проверить отчет о сбоях, используя acra, но первым шагом я должен смоделировать фатальный сбой в Android с помощью кода.

Любая идея?

4b9b3361

Ответ 1

Just execute this code: divide by zero

Обновление: также можно попробовать Создайте метод,

public void stackOverflow() {
        this.stackOverflow();

    }

И назовите это где-нибудь/buttonClick

ИЛИ просто бросить неперехваченное исключение

throw new RuntimeException("This is a crash");

Бинго!

Ответ 2

  • Доступ к представлению, которое не определено.
  • Доступ к первому элементу пустого списка без проверки.
  • Разделить на ноль.
  • Выньте устройство из окна.
  • Погрузите устройство в воду.

Кстати, этот IS глупый вопрос.

Ответ 3

Не объявляйте активность в манифесте Android.

Ответ 4

Вы можете попробовать исключение Null Pointer.

Integer i = null;

Затем вызовите любой метод объекта.

i.byteValue();

Вызов метода для объекта, который не был инициализирован, приведет к краху приложения.

Ответ 5

Очень простой подход... и очень важно понять, почему это произошло.

Попробуйте инициировать переменную в onCreate() до метода setContentView(), затем используйте ее для вызова метода или переменной или попробуйте зарегистрировать ее в каком-то прослушивателе.

Например:

Button b;

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        b = (Button)findViewById(R.id.butt);
        b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {


        }
    });
        setContentView(R.layout.main);


    }

Это сбой, потому что до setContentView() ни один из компонентов/вида в макете main.xml не получил идентификаторы.

Ответ 6

Просто создайте в своем main.xml кнопку, подобную этой:

 <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="crash"
    android:text="Crash me" />

затем запустите приложение и нажмите для сбоя

Ответ 7

Проще всего знаю: throw null.

Вы не можете выбросить нуль, поэтому возникает исключение NullPointerException.

throw null;

Ответ 8

Вы можете потерпеть крах с простым исключением нулевой точки.

 throw new NullPointerException();

Ответ 9

в дополнение к ответу @vinnet-shukla:

"ИЛИ просто бросить необъяснимое исключение"

выбрасывать неперехваченное исключение для сбоя - плохая идея, поскольку исключение может быть захвачено где-то выше в стеке - особенно когда вы не знаете, где мы сейчас находимся :)

более элегантный способ - использовать ERROR

Ошибка - это подкласс Throwable, который указывает на серьезные проблемы, которые разумное приложение не должно пытаться обнаружить. Большинство таких ошибок являются ненормальными условиями. Ошибка ThreadDeath, хотя и является "нормальным" условием, также является подклассом Error, поскольку большинство приложений не должны пытаться ее перехватить.

чтобы мы могли создать собственный подкласс Error и использовать его:

/*
 * usage:
 * 
 *   CrashError.doCrash(); 
 *
 */
public class CrashError extends Error {

    public CrashError() { 
        this("simulated crash");
    }

    public CrashError(String msg) {
        super(msg);
    }

    public static void doCrash() {
        throw new CrashError();
    }

}

но если мы говорим о других возможностях, мы могли бы также бросить проверенное исключение :)

это также будет уроком, как мы могли бы ПЕРЕСМОТРЕТЬ ПРОВЕРЕННОЕ ИСКЛЮЧЕНИЕ :) другим способом, кроме использования sun.misc.Unsafe, особенно когда класс недоступен в реализации VM

@SuppressWarnings("unchecked")
public static <E extends Throwable> void throwAnyT(Throwable e) throws E {
    throw (E) e;
}

public static void throwUnchecked(Throwable e) {
    throwAny(e);
    // should never get there.
    throw new InternalError();
}

public static void crash() {
    throwUnchecked(new java.io.IOException("simulated crash"));
}

в дополнение к @audric ответу:

"Вы не можете бросить ноль"

да, вы можете :) это именно то, что вы делаете в своем примере, и да, это может стать необнаружимым, если блок catch не будет использовать Throwable - NPX никогда не будет выброшен, и просто будет нормальный поток, когда код все еще будет выполняться, и да, я Увидел это и испытал на себе :) на АНДРОИД ДАЛЬВИК

и что насчет..? Может быть, это может удовлетворить ваши потребности?

специфичные для Java (также в Android):

- Runtime.getRuntime().exit(int);
- System.exit(int);
- Runtime.getRuntime().halt(int);

специфичный для Android:

- android.os.Process.killProcess(int);
- android.os.Process.killProcessQuiet(int);
- android.os.Process.sendSignal(int,int);
- android.system.Os.kill(int);

Ответ 10

Используйте следующий код:

String xyz=null;
system.out.println(xyz);