AsyncTask 与 Glide 用于清除缓存
AsyncTask with Glide for clearing Cache
正在抛出错误:
Caused by: java.lang.IllegalArgumentException: You must call this method on the main thread
代码:
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();
我不知道您的用例或应用流程。但是 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
的更多示例
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();
}
}
试试这个
两种方法都适用于不同的线程。
clearDiskCache() 必须在后台线程上调用。
必须在主线程上调用 clearMemory()。
您不能在同一线程上同时调用两者。
void clearGlideCache()
{
new Thread()
{
@Override
public void run()
{
Glide.get(DemoActivity.this).clearDiskCache();
}
}.start();
Glide.get(DemoActivity.this).clearMemory();
}
正在抛出错误:
Caused by: java.lang.IllegalArgumentException: You must call this method on the main thread
代码:
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();
我不知道您的用例或应用流程。但是 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
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();
}
}
试试这个
两种方法都适用于不同的线程。
clearDiskCache() 必须在后台线程上调用。
必须在主线程上调用 clearMemory()。
您不能在同一线程上同时调用两者。
void clearGlideCache()
{
new Thread()
{
@Override
public void run()
{
Glide.get(DemoActivity.this).clearDiskCache();
}
}.start();
Glide.get(DemoActivity.this).clearMemory();
}