我一次运行了几个 AsyncTasks,它似乎导致了一些特殊的问题,比如渲染按钮不可用。一个 AsyncTask 负责保持会话活动,并在每个活动的 onResume() 中运行:
public class SessionKeepAliveTask extends AsyncTask<Void, Void, Void> {
private Context mContext;
public SessionKeepAliveTask(Context context) {
mContext = context;
}
@Override
protected Void doInBackground(Void... params) {
try {
... create httpClient, set headers with cookie,
send request, process results
...
然后我有另一个 AsyncTask 用于简单地从服务器获取 JSON 对象并将结果加载到列表视图中:
public class ClaimSearchService extends AsyncTask<HashMap<String,String>, Void, Void> {
protected Context mContext;
private Listener mListener = null;
public ClaimSearchService(Listener listener, Context context) {
super();
mListener = listener;
mContext = context;
}
@Override
protected Void doInBackground(HashMap<String,String>... params) {
try {
...send the request, get the results, pass them to listener for
processing in another activity
如果我不运行 SessionKeepAliveTask 任务,那么我的搜索服务将按预期工作,但如果我这样做,我会遇到一些不可预知的错误。我更感兴趣的是知道如何开始调试这个问题,而不是一个可靠的答案,但显然如果有人在此之前遇到这个问题会很棒。我可以在 DDMS 监视器中看到当前线程,但我不确定如何使用它。