投掷错误
引起:java.lang.IllegalArgumentException:您必须调用它 主线程上的方法
Class CacheClearAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
Glide.get(getActivity()).clearDiskCache();
Glide.get(getActivity()).clearMemory();
return null;
}
@Override
protected void onPostExecute (Void result)
{
//Toast.makeText(getActivity(), "Cache cleared", Toast.LENGTH_LONG).show();
}
}
设置点击事件的首选项
clearCacheBtnPref=findPreference(getResources().getString(R.string.pref_btn_clear_cache_key));
clearCacheBtnPref.setOnPreferenceClickListener(new
Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
new CacheClearAsyncTask().execute();
return true;
}
});
这不能在主线程中调用,因为它也会抛出错误,也不会让我使用asynctask。
Glide.get(getActivity()).clearDiskCache();
Glide.get(getActivity()).clearMemory();
答案 0 :(得分:1)
clearDiskCache()
,而clearMemory()
来自主线程,所以:
class CacheClearAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
Glide.get(getActivity()).clearDiskCache();
return null;
}
@Override
protected void onPostExecute (Void result) {
Glide.get(getActivity()).clearMemory();
}
}
答案 1 :(得分:0)
我不知道您的用例或应用流程。但是doInBackground
专门用于在后台线程中进行操作而不是主UI线程。
现在,如果您需要在doInBackground
中执行与主UI线程相对应的更改,请执行以下操作
@Override
protected Void doInBackground(Void... params) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
Glide.get(getActivity()).clearDiskCache();
Glide.get(getActivity()).clearMemory();
}
});
return null;
}
有关runOnUiThread
refer this
答案 2 :(得分:0)
试试这个
两种方法都适用于不同的线程。
必须在后台线程上调用clearDiskCache() 必须在主线程上调用clearMemory() 你不能在同一个线程上同时调用它们。
void clearGlideCache()
{
new Thread()
{
@Override
public void run()
{
Glide.get(DemoActivity.this).clearDiskCache();
}
}.start();
Glide.get(DemoActivity.this).clearMemory();
}