У меня есть одно занятие, которое загружает данные из Интернета.В середине процесса загрузки приложение закрывается, если я начинаю процесс загрузки более одного раза.Я использую AsyncTask для загрузки данных и Runnable для выполнения шагов и.Вот мой кодДолжен ли я удалить обратный вызов для обработчика при завершении задачи?Если я помещаю функцию обратного вызова remove в метод pause или destroy, это выдает ошибку принудительного закрытия.
mBackgroundHandler = new Handler();
mRunnable = new Runnable()
{
public void run()
{
mCounterProgress = KamaApplication.getStep();
Log.v(TAG, "Progress: " + mCounterProgress);
mRefreshProgress.setProgress(mCounterProgress);
mRefreshProgress.invalidate();
if(KamaApplication.getTotalStep() == 100 && KamaApplication.getStep() == 99)
{
mStop = true;
}
if(!mStop)
{
mBackgroundHandler.postDelayed(this, 1000);
}
}
};
mBackgroundHandler.postDelayed(mRunnable, 1000);
Вот мой AsyncTask
private class DownloadFilesTask extends AsyncTask<Void, Integer, Void>
{
protected Void doInBackground(Void... params)
{
try
{
StepsGeneratorInputJsonData stepsGeneratorInputJsonData = new StepsGeneratorInputJsonData();
stepsGeneratorInputJsonData.provider = "Android";
stepsGeneratorInputJsonData.identification = "Vogue";
stepsGeneratorInputJsonData.password = "abcd";
mResult = createAndExecuteStepsGenerator(stepsGeneratorInputJsonData);
JSONObject mNewJSONObject = new JSONObject(mResult);
String mEndDate = mNewJSONObject.getString("endDate");
if(mEndDate.equals("null"))
{
mRefreshSuccess = false;
}
else
{
mRefreshSuccess = true;
}
}
catch (Exception eException)
{
Log.v(TAG, "HotTestGettingError: " + eException.toString());
mRefreshSuccess = false;
}
return null;
}
protected void onProgressUpdate(Integer... progress)
{ }
protected void onPostExecute(Void result)
{
if(mRefreshSuccess)
{
insertData();
}
else
{
Message mMessage = new Message();
mMessage.what = 0;
mHandler.sendMessage(mMessage);
}
mBackgroundHandler.removeCallbacks(mRunnable);
updateDisplay();
}
}
И я увидел logcat и получил это:
06-25 12:08:28.007: INFO/WindowManager(128): WIN DEATH: Window{408fc1d8 com.mygosoftware.kama/com.mygosoftware.kama.Usage paused=false}
06-25 12:08:28.011: INFO/ActivityManager(128): Process com.mygosoftware.kama (pid 17691) has died.
06-25 12:08:28.078: INFO/ActivityManager(128): Start proc com.sec.android.app.twlauncher for activity com.sec.android.app.twlauncher/.Launcher: pid=17817 uid=10015 gids={3003, 1015, 3002}
06-25 12:08:28.078: INFO/ActivityManager(128): Low Memory: No more background processes.
06-25 12:08:28.148: INFO/Zygote(17817): Zygote: pid 17817 has CALL PRIVILEGED permission, then set capability for CAP_SYS_ADMIN (21)
06-25 12:08:28.312: INFO/ActivityThread(17817): Pub com.sec.android.app.twlauncher.settings: com.sec.android.app.twlauncher.LauncherProvider
06-25 12:08:28.445: INFO/Launcher(17817): onCreate(): product model family:S1 product model : GT-I9000
06-24 16:47:38.269: ERROR/InputDispatcher(128): channel '40823250 com.mygosoftware.kama/com.mygosoftware.kama.Usage (server)' ~ Consumer closed input channel or an error occurred. events=0x8
06-24 16:47:38.269: ERROR/InputDispatcher(128): channel '40823250 com.mygosoftware.kama/com.mygosoftware.kama.Usage (server)' ~ Channel is unrecoverably broken and will be disposed!
06-24 16:47:38.304: INFO/ActivityManager(128): Process com.mygosoftware.kama (pid 7637) has died.
Я поместил в файл AndroidManifest
<activity android:name=".Usage" android:screenOrientation="portrait"
android:clearTaskOnLaunch="true">
, а также установил
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
, а также добавил метод onPause()
в свою деятельность.
Более того, я ссылался на эту ссылку Активность возобновляется при Force Close .У меня очень похожая проблема.Я сделал все, что они написали в ответе, но все еще получаю ошибку.
Что я должен сделать, чтобы удалить эту ошибку?
Спасибо.