原始版本低於
事實上,經過進一步的測試中,我發現,您可以通過只交給異常到你的主線程簡化代碼直。
public static <T extends Exception> void throwOnMainThread(T exception) {
Thread mainThread = Looper.getMainLooper().getThread();
mainThread.getUncaughtExceptionHandler().uncaughtException(mainThread, exception);
}
這會從任何地方崩潰的主線程是安全的,甚至稱不設置自定義的UncaughtExceptionHandler。
原來的答覆:
考慮從後臺線程崩潰主線程下列靜態方法:
public static <T extends Exception> void throwOnMainThread(final T exception) {
Handler mainThreadHandler = new Handler(Looper.getMainLooper());
mainThreadHandler.post(new Runnable() {
@Override
public void run() {
Thread currentThread = Thread.currentThread();
currentThread.getUncaughtExceptionHandler().uncaughtException(currentThread, exception);
}
});
}
首先,我們獲得通過主尺蠖主線程處理程序。然後我們發佈一個Runnable,它將調用該線程的UncaughtExceptionHandler,並將其傳遞給我們的異常。
把它放到一個utils類中,你將能夠從基本上任何地方在主線程上拋出異常。
崩潰主線程然後可通過使用
ThreadUtils.throwOnMainThread(new RuntimeException());
例如來實現。
這不適用於所有Executor實現。其中一些人不打電話給處理程序。你必須重寫'afterExecute'並重新拋出RuntimeException或Error從那裏強制它崩潰。 – Monstieur