В главной активности находится класс фрагмента использующий LoaderManager
для загрузки данных из БД для отображения их изменения в реальном времени, данные отображаются но после некоторого простоя все падает с ошибкой
java.util.concurrent.RejectedExecutionException: Task android.support.v4.content.ModernAsyncTask$3@344318a6 rejected from java.util.concurrent.ThreadPoolExecutor@287842e7[Running, pool size = 128, active threads = 3, queued tasks = 0, completed tasks = 22627]
и в логах указывается строка, где происходит падение
getActivity().getSupportLoaderManager().getLoader(11).forceLoad();
у меня несколько конструкций switch/case и ошибка возникает в случайном из них, но строка ошибки всегда
getActivity().getSupportLoaderManager().getLoader("номер лоадера").forceLoad();
вот сам класс фрагмента
public class Summary_fragment extends Fragment implements
LoaderManager.LoaderCallbacks<Cursor>
{
DataBase db;
int[] mcolors = new int[]{
R.color.graph_1,
R.color.graph_2,
R.color.graph_3,
R.color.graph_4,
R.color.graph_5,
R.color.graph_6,
R.color.graph_7,
R.color.graph_8,
R.color.graph_9,
R.color.graph_10
};
PieChart chart;
float pie0; // переменные для отображения графика
float pie1;
float pie2;
float pie3;
float pie4;
float total;
TextView current_value;
TextView total_value;
TextView last_date;
TextView last_price;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View summary_fragment = inflater.inflate (R.layout.fragment_summary, container, false);
db = new DataBase(getActivity());
db.open();
chart = (PieChart) summary_fragment.findViewById(R.id.summary_chart);
chart.setHighlightPerTapEnabled(false); //отключение выделения графика
current_value = (TextView) summary_fragment.findViewById(R.id.current_mileage_value);
total_value = (TextView) summary_fragment.findViewById(R.id.total_value);
last_date = (TextView) summary_fragment.findViewById(R.id.last_date);
last_price = (TextView) summary_fragment.findViewById(R.id.last_price_per_liter);
getActivity().getSupportLoaderManager().initLoader(11, null, this);
getActivity().getSupportLoaderManager().getLoader(11).forceLoad();
getActivity().getSupportLoaderManager().initLoader(12, null, this);
getActivity().getSupportLoaderManager().getLoader(12).forceLoad();
getActivity().getSupportLoaderManager().initLoader(13, null, this);
getActivity().getSupportLoaderManager().getLoader(13).forceLoad();
chart.setHoleRadius(55);
chart.setTransparentCircleRadius(58);
chart.setNoDataText("Вы еще не ввели никаких данных");
chart.getDescription().setEnabled(false); //убрать подпись внизу справа
chart.setEntryLabelColor(Color.BLACK); //цвет текста подписей приклеенных к графику
chart.getLegend().setEnabled(false);
return summary_fragment;
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle bnd)
{
return new SummaryLoader(getActivity(), db, id);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor)
{
switch (loader.getId())
{
case 11:
getActivity().getSupportLoaderManager().getLoader(11).forceLoad();
if (cursor.moveToFirst())
{
pie0 = cursor.getFloat(0);
pie1 = cursor.getFloat(1);
pie2 = cursor.getFloat(2);
pie3 = cursor.getFloat(3);
pie4 = cursor.getFloat(4);
ArrayList<PieEntry> entries = new ArrayList<>();
if (pie0 > 0)
{
entries.add(new PieEntry(pie0, "тест1"));
}
if (pie1 > 0)
{
entries.add(new PieEntry(pie1, "тест2"));
}
if (pie2 > 0)
{
entries.add(new PieEntry(pie2, "тест3"));
}
if (pie3 > 0)
{
entries.add(new PieEntry(pie3, "тест4"));
}
if (pie4 > 0)
{
entries.add(new PieEntry(pie4, "тест5"));
}
PieDataSet dataset = new PieDataSet(entries, "данные");
PieData data = new PieData(dataset);
dataset.setColors(mcolors, getActivity());
//dataset.setColors(ColorTemplate.MATERIAL_COLORS);
//dataset.setDrawValues(false); //убрать числовые значения на круге
dataset.setSliceSpace(5f); // разделение между кусками графика
dataset.setYValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); //вынос числовых значений наружу круга
dataset.setXValuePosition(PieDataSet.ValuePosition.OUTSIDE_SLICE); // вынос надписей наружу круга
dataset.setValueTextSize(14);
dataset.setSelectionShift(20); // отступы от краев экрана что бы текстовые метки не уходили за экран
chart.setData(data);
chart.invalidate();
total = pie0 + pie1 + pie2 + pie3 + pie4;
total_value.setText(new DecimalFormat("#0.00").format(total) + getResources().getString(R.string.Currency));
break;
}
case 12:
getActivity().getSupportLoaderManager().getLoader(12).forceLoad();
if (cursor.moveToFirst())
{
current_value.setText(cursor.getString(0) + getResources().getString(R.string.Range_unit));
}
break;
case 13:
getActivity().getSupportLoaderManager().getLoader(13).forceLoad();
if (cursor.moveToLast())
{
last_date.setText(cursor.getString(2));
last_price.setText(new DecimalFormat("#0.00").format(cursor.getFloat(0)) + getResources().getString(R.string.Currency));
}
else
{
last_date.setText("-");
last_price.setText(0 + getResources().getString(R.string.Currency));
}
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader)
{
}
static class SummaryLoader extends CursorLoader
{
DataBase db;
Cursor cursor;
final int LoaderID;
public SummaryLoader (Context context, DataBase db, int id)
{
super(context);
this.db = db;
LoaderID = id;
}
@Override
public Cursor loadInBackground()
{
switch (LoaderID)
{
case 11: cursor = db.sum_for_graph();
break;
case 12: cursor = db.get_current();
break;
case 13: cursor = db.last_add();
break;
}
return cursor;
}
}
}
и вот описание ошибки
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.evico.mycar, PID: 5637
java.util.concurrent.RejectedExecutionException: Task android.support.v4.content.ModernAsyncTask$3@fd286dd rejected from java.util.concurrent.ThreadPoolExecutor@da8f252[Running, pool size = 128, active threads = 2, queued tasks = 0, completed tasks = 33174]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2011)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:793)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1339)
at android.support.v4.content.ModernAsyncTask.executeOnExecutor(ModernAsyncTask.java:447)
at android.support.v4.content.AsyncTaskLoader.executePendingTask(AsyncTaskLoader.java:225)
at android.support.v4.content.AsyncTaskLoader.onForceLoad(AsyncTaskLoader.java:153)
at android.support.v4.content.Loader.forceLoad(Loader.java:329)
at com.evico.mycar.activity_fragments.Fuel_fragment.onLoadFinished(Fuel_fragment.java:216)
at com.evico.mycar.activity_fragments.Fuel_fragment.onLoadFinished(Fuel_fragment.java:35)
at android.support.v4.app.LoaderManagerImpl$LoaderInfo.callOnLoadFinished(LoaderManager.java:476)
at android.support.v4.app.LoaderManagerImpl$LoaderInfo.onLoadComplete(LoaderManager.java:444)
at android.support.v4.content.Loader.deliverResult(Loader.java:126)
at android.support.v4.content.CursorLoader.deliverResult(CursorLoader.java:105)
at android.support.v4.content.CursorLoader.deliverResult(CursorLoader.java:37)
at android.support.v4.content.AsyncTaskLoader.dispatchOnLoadComplete(AsyncTaskLoader.java:255)
at android.support.v4.content.AsyncTaskLoader$LoadTask.onPostExecute(AsyncTaskLoader.java:80)
at android.support.v4.content.ModernAsyncTask.finish(ModernAsyncTask.java:485)
at android.support.v4.content.ModernAsyncTask$InternalHandler.handleMessage(ModernAsyncTask.java:502)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как получить байт код класса, это понятно, можно при помощи идеи или же дефолтными средствами
Написал сервис на Spring Boot, после чего, было необходимо перевести его на TomcatДля этого необходимо было добавить плагин в gradle, чтобы получить...
Всем приветХочу написать тест, который будет открывать веб-страничку, считывать нее текст, и в зависимости от результата нажимать ту или...