标签: asynctaskloader

AsyncTaskLoader.deliverResult()实际上做了什么?

我试图了解AsyncTaskLoaders的一些细节.对于其他人来说,这可能是显而易见的,但我无法找到一个明确的示例或定义来演示和夸大当您覆盖该deliverResult()方法时会发生什么.实际交付的是什么?它如何与调用对象交互?我可以看到使用super.deliverResult,它从类中传递一个私有对象.那么,加载器是否自动知道与"交付结果"相关联的内容.我完全糊涂了.

android asynctaskloader

8
推荐指数
2
解决办法
3366
查看次数

Android - 线程池策略和Loader可以用来实现吗?

首先是问题:

  • 我正在研究在FragmentLists 自定义中使用多个的应用程序FragmentStatePagerAdapter.可能有大量此类碎片在20到40之间.
  • 每个片段都是一个列表,其中每个项目可以包含文本或图像.
  • 图像需要从Web异步上载并缓存到临时内存缓存,如果可用,还需要SD
  • 当片段离开屏幕时,任何上传和当前活动都应该被取消(不会暂停)

我的第一个实现遵循着名的谷歌图像加载器代码.我的代码问题是它基本上创建了AsyncTask每个图像的一个实例.在我的情况下,这快速杀死应用程序.

由于我使用的是v4兼容包,我认为使用扩展的自定义Loader AsyncTaskLoader会对我有所帮助,因为它内部实现了一个线程池.但令我不愉快的是,如果我执行此代码多次,每次调用后都会中断前一次.说我的ListView#getView方法中有这个:

getSupportLoaderManager().restartLoader(0, args, listener);
Run Code Online (Sandbox Code Playgroud)

对于进入视图的每个列表项,在循环中执行此方法.正如我所说 - 以下每次调用都会终止前一个调用.或者至少这是基于LogCat发生的事情

11-03 13:33:34.910: V/LoaderManager(14313): restartLoader in LoaderManager: args=Bundle[{URL=http://blah-blah/pm.png}]
11-03 13:33:34.920: V/LoaderManager(14313):   Removing pending loader: LoaderInfo{405d44c0 #2147483647 : ImageLoader{405118a8}}
11-03 13:33:34.920: V/LoaderManager(14313):   Destroying: LoaderInfo{405d44c0 #2147483647 : ImageLoader{405118a8}}
11-03 13:33:34.920: V/LoaderManager(14313):   Enqueuing as new pending loader
Run Code Online (Sandbox Code Playgroud)

然后我认为可能给每个装载机提供唯一的ID将有助于事情,但它似乎没有任何区别.结果我最终得到看似随机的图像,应用程序永远不会加载我需要的1/4.

问题

  • 什么是修复Loader来做我想做的事情的方法(有没有方法?)
  • 如果不是什么是创建AsyncTask池的好方法,是否可能正在实施它?

为了让您了解这里的代码是剥离版本的Loader,其中实际的下载/保存逻辑位于单独的ImageManager类中.

    public class ImageLoader extends AsyncTaskLoader<TaggedDrawable> {
        private static final String TAG = ImageLoader.class.getName();
        /** Wrapper …
Run Code Online (Sandbox Code Playgroud)

android threadpool android-fragments asynctaskloader

7
推荐指数
1
解决办法
5253
查看次数

Volley或ASyncTaskLoader

他们告诉我们应该使用ASyncTaskLoaders,因为他们非常善于阻止UI线程.现在有Volley使用.

我想我们不能同时使用它们,因为Volley自己做了背景.你怎么看?哪一个更好?

android asynctaskloader android-volley

6
推荐指数
1
解决办法
2318
查看次数

如何将params传递给Android AsnycTaskLoader

我正在尝试将params传递给AsyncTaskLoader.我怎么做?

目前,我正在将我需要传递的内容放在一个单独的静态类中.无论如何围绕这个?

public class NewsAsyncTaskLoader extends AsyncTaskLoader<List<Content>> {

    private static final DbHelper dbHelper = DbHelperFactory.getDbHelper();

    public FeedAsyncTaskLoader(Context context) {
        super(context);
    }

    @Override
    public List<Content> loadInBackground() {
        List<Content> contents = DbHelper.getStream(FeedSections.getInstance().getCurrentSection());

        feed.setContents(contents);

        return feed;
    }
}
Run Code Online (Sandbox Code Playgroud)

android asynctaskloader

6
推荐指数
1
解决办法
3851
查看次数

如何取消AsyncTaskLoader工作?

我注意到AsyncTaskLoader,Loader和LoaderManager的以下函数:

事情是,我不明白他们的工作方式:

  1. 他们之间有什么区别?
  2. 他们中的任何一个在加载器的线程上调用"interrupt"吗?如果没有,是否可能?
  3. 当调用这些函数时,加载程序如何停止其操作?
  4. 加载器如何取消自身(因为两个函数只需要在UI线程上运行)?
  5. 销毁/重置/放弃加载器是否也取消了它?
  6. 即使加载器还没有启动," isLoadInBackgroundCanceled " 也会返回true吗?
  7. UI线程如何知道加载器已被取消?它应该使用" isLoadInBackgroundCanceled "吗?
  8. 取消装载机的典型做法是什么?重启一个装载机?要重新启动加载程序但输入不同?

android loader asynctaskloader

6
推荐指数
0
解决办法
281
查看次数

使用AsyncTaskLoader和Fragment的方法onCreateLoader中的类型不兼容

我考虑了使用AsyncTaskLoader和Fragment(https://gist.github.com/codeswimmer/884591)的一些例子,我试图做同样的事情.但是现在我无法修复不兼容的类型错误 - 在onCreateLoader方法中.我不知道为什么会这样,因为我也做了同样的事情.

FeedLoader.java

public class FeedLoader extends AsyncTaskLoader<ArrayList<RSSItemData>> {

    ArrayList<RSSItemData> listData;
    Context ctx;
    RSSItemData rssItem;
    final Integer HTTP_CONNECTION_TIMEOUT = 15;
    DBHelper dbHelper;


    public FeedLoader(Context context) {
        super(context);
        this.ctx = context;
        dbHelper = new DBHelper(ctx);
    }


    @Override
    public ArrayList<RSSItemData> loadInBackground() {

        listData = new ArrayList<RSSItemData>();

        if(!BaseUtils.isNetworkAvailable(ctx)) return getNewsFromDB();

        if(doWeHaveAnyNews()){

            Log.d("myLogs", "We have news!");

            String data = JSONUtils.getJSON("http://I-changed-URL.com", HTTP_CONNECTION_TIMEOUT*1000, ctx);
            JSONResult result  = new Gson().fromJson(data, JSONResult.class);
            listData = result.items;

            deleteAllNewsFromDB();
            putNewsIntoDB(listData);

        }
        else{

            Log.d("myLogs", "No news, retrieve from database"); …
Run Code Online (Sandbox Code Playgroud)

android asynctaskloader

6
推荐指数
1
解决办法
2789
查看次数

从AsyncTaskLoader更新UI

我已将我转换AsyncTaskAsyncTaskLoader(主要用于处理配置更改).我有TextView我使用的进展状况,并使用onProgressUpdateAsyncTask更新它.它看起来不像AsyncTaskLoader是等价的,所以在loadInBackground(AsyncTaskLoader我)使用它时:

getActivity().runOnUiThread(new Runnable() {
    public void run() {
        ((TextView)getActivity().findViewById(R.id.status)).setText("Updating...");
    }
});
Run Code Online (Sandbox Code Playgroud)

我正在使用它Fragment,这就是我使用的原因getActivity().这项工作非常顺利,除非发生配置更改,例如更改屏幕方向.我AsyncTaskLoader一直在跑(这就是为什么我正在使用AsyncTaskLoader),但runOnUiThread似乎被跳过了.

不知道为什么会被跳过,或者这是从更新UI的最佳方式 AsyncTaskLoader.

更新:

我最终恢复了一个,AsyncTask因为它似乎更适合UI更新.希望他们能将合并的东西合并到AsyncTask一起AsyncTaskLoader.

android android-ui android-asynctask asynctaskloader

5
推荐指数
1
解决办法
5867
查看次数

Android系统.你自己的进步吧?

第4个小时的搜索,没有结果都一样.我们不应该这样做的事实.告诉我如何实现以下内容:

  1. AsyncTask执行某些操作
  2. 共有25张以下表格的图片:图片 在此输入图像描述
  3. 有片动画xml:

     <animation-list
             xmlns:android="http://schemas.android.com/apk/res/android"
             android:oneshot="true"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content">
             <item android:drawable="@drawable/a1" android:duration="250"/>
             <item android:drawable="@drawable/a2" android:duration="250"/>
             <item android:drawable="@drawable/a3" android:duration="250"/>
             <item android:drawable="@drawable/a4" android:duration="250"/>
             <item android:drawable="@drawable/a5" android:duration="250"/>
             <item android:drawable="@drawable/a6" android:duration="250"/>
             <item android:drawable="@drawable/a7" android:duration="250"/>
             <item android:drawable="@drawable/a8" android:duration="250"/>
             <item android:drawable="@drawable/a9" android:duration="250"/>
             <item android:drawable="@drawable/a10" android:duration="250"/>
             <item android:drawable="@drawable/a11" android:duration="250"/>
             <item android:drawable="@drawable/a12" android:duration="250"/>
             <item android:drawable="@drawable/a13" android:duration="250"/>
             <item android:drawable="@drawable/a14" android:duration="250"/>
             <item android:drawable="@drawable/a15" android:duration="250"/>
             <item android:drawable="@drawable/a16" android:duration="250"/>
             <item android:drawable="@drawable/a17" android:duration="250"/>
             <item android:drawable="@drawable/a18" android:duration="250"/>
             <item android:drawable="@drawable/a19" android:duration="250"/>
             <item android:drawable="@drawable/a20" android:duration="250"/>
             <item android:drawable="@drawable/a21" android:duration="250"/>
             <item android:drawable="@drawable/a22" android:duration="250"/>
             <item android:drawable="@drawable/a23" android:duration="250"/>
             <item android:drawable="@drawable/a24" …
    Run Code Online (Sandbox Code Playgroud)

customization android asynctaskloader progress-bar animationdrawable

5
推荐指数
1
解决办法
1498
查看次数

解释AsyncTaskLoader

我不明白所做的所有功能AsyncTaskLoader,例如onCancelLoad()onForceLoad().所有功能及其调用顺序均未正确记录.

假设我想在后台下载文件并在需要时取消它.onCancelLoad()已经有了 什么目的cancelLoadInBackground().

android android-asynctask asynctaskloader android-loadermanager android-loader

5
推荐指数
1
解决办法
727
查看次数

AsyncTask 已被弃用?使用什么方法代替 onPreExecute 和 onPostExecute?

在我的旧项目中,我使用了 AsyncTask,但它已被弃用,那么我使用什么方法来代替这个呢?如果我们使用线程,则在 AsyncTask 中具有 onbackground、onPreExecute 和 onPostExecute Override 方法,其中本节在线程中调用。有没有什么替代方法。你能给我解决方案吗?

Java代码:

      public class getDetailsfromWeb extends AsyncTask<Void, Void, String> {

      @Override
      protected String doInBackground(Void... params) {

        if (paymentSync == null)

            paymentSync = new ReceivePaymentSync(getActivity());

        allCreditCardModel = new AllCreditCardModel();

        allCreditCardModel = paymentSync.getGetCreditCardById(CrediCardId);

        handler.post(allCreditRunnable);

        return null;
    }

    /**
     * @param string
     */
    public void execute(String string) {

        // TODO Auto-generated method stub
    }

    protected void onPreExecute() {

        showProgress();

    }

    @Override
    protected void onPostExecute(String result) {

        progress.dismiss();

    }
}
Run Code Online (Sandbox Code Playgroud)

android android-asynctask asynctaskloader android-studio

5
推荐指数
2
解决办法
1万
查看次数