在常规的Android开发过程中,随着业务逻辑越来越复杂,调用栈可能会越来越深,难免会遇到调用栈越界的情况,这种情况下,就需要调整线程栈的大小。
当然,主要还是增大线程栈大小,尤其是存在jni调用的情况下,C++层的栈开销有时候是非常恐怖的,比如说递归调用。
这就需要分三种情况,主线程,自定义线程池,AsyncTask。
主线程的线程栈是没有办法进行修改的,这个没办法处理。
针对线程池的情况,需要在创建线程的时候,调用构造函数
public Thread(@RecentlyNullable ThreadGroup group, @RecentlyNullable Runnable target, @RecentlyNonNull String name, long stackSize)
通过设置stackSize参数来解决问题。
参考代码如下:
import android.support.annotation.NonNull;
import android.util.Log;
import java.util.concurrent.ThreadFactory;
/**
* A ThreadFactory implementation which create new threads for the thread pool.
*/
public class SimpleThreadFactory implements ThreadFactory {
private static final String TAG = "SimpleThreadFactory";
private final static ThreadGroup group = new ThreadGroup("SimpleThreadFactoryGroup");
// 工作线程堆栈大小调整为2MB
private final static int workerStackSize = 2 * 1024 * 1024;
@Override
public Thread newThread(@NonNull final Runnable runnable) {
final Thread thread = new Thread(group, runnable, "PoolWorkerThread", workerStackSize);