【发布时间】:2022-10-24 12:46:50
【问题描述】:
在我的多线程应用程序中,为了防止应用程序没有响应(ANR),我使用 ExecutorService 对象的执行 API 来调用 startActvity()。大多数时候它按预期工作。我能够看到日志callIntent: starting 和run: inside run,但是在我多次重新启动设备并尝试调用callIntent(context,intent) 后,它有时无法正常工作。这是奇怪的行为。
这个实现出了什么问题?
当我使用主/UI线程时,我得到了ANR并且我已经运行了 HandlerThread 运行这个 startActivity,但行为相同
executor 没有关闭也没有终止,但是执行失败
import android.app.Application; import android.content.Context; import android.content.Intent; import android.util.Log; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class App extends Application { private static final String TAG = "##App##"; private ExecutorService executorService; @Override public void onCreate() { super.onCreate(); executorService= Executors.newSingleThreadExecutor(); } public void callIntent(Context context, Intent intent){ Log.d(TAG, "callIntent: starting"); if(executor.isShutdown()||executor.isTerminated()){ Log.d(TAG, "callStartActivity executor is shutdown - restarting again "); executor = Executors.newSingleThreadExecutor(); }else{ Log.d(TAG, "callStartActivity:not shut or trminated "); } executorService.execute(new Runnable() { @Override public void run() { Log.d(TAG, "run: inside run "); context.startActivity(intent); } }); } } }
【问题讨论】:
-
提示:捕获并记录您传递给
ExcecutorService的Runnable中的所有异常,否则线程可能会默默地死掉并且您的ExecutorService将停止接受新工作。 -
这里没有抛出异常
标签: java android multithreading executorservice