相关疑难解决方法(0)

Handler vs AsyncTask vs Thread

我稍微感到困惑之间的差异Handlers,AsyncTaskThreads在Android中.我在stackoverflow中阅读了很多博客和问题.

Handler是后台线程,提供您与UI进行通信.例如,更新进度条应该通过Handler.使用处理程序可以获得优势MessagingQueues,因此,如果要计划消息或更新多个UI元素或具有重复任务.

AsyncTask类似的,实际上它们使用Handler但不在UI线程中运行,因此它对于获取数据很有用,例如获取Web服务.稍后您可以与UI进行交互.

Thread然而,无法与UI交互,提供更多"基本"线程,你错过了所有的抽象AsyncTask.

但是,我想在服务中运行套接字连接.应该在处理程序或线程中运行,还是在AsyncTask?根本不需要UI交互.它在我使用的性能方面有所不同吗?

与此同时,文件已得到重大改进.

multithreading android android-asynctask android-handler

379
推荐指数
8
解决办法
13万
查看次数

Android AsyncTask API 在 Android 11 中弃用。有哪些替代方案?

Google 正在弃用 Android 11 中的 Android AsyncTask API,并建议java.util.concurrent改用。你可以在这里查看提交

 *
 * @deprecated Use the standard <code>java.util.concurrent</code> or
 *   <a href="https://developer.android.com/topic/libraries/architecture/coroutines">
 *   Kotlin concurrency utilities</a> instead.
 */
@Deprecated
public abstract class AsyncTask<Params, Progress, Result> {
Run Code Online (Sandbox Code Playgroud)

如果您在 Android 中维护带有异步任务的旧代码库,则将来可能需要对其进行更改。我的问题是,使用java.util.concurrent. 它是一个 Activity 的静态内部类。我正在寻找可以使用的东西minSdkVersion 16

private static class LongRunningTask extends AsyncTask<String, Void, MyPojo> {
        private static final String TAG = MyActivity.LongRunningTask.class.getSimpleName();
        private WeakReference<MyActivity> activityReference;

        LongRunningTask(MyActivity context) {
            activityReference = new WeakReference<>(context);
        }

        @Override
        protected MyPojo doInBackground(String... params) { …
Run Code Online (Sandbox Code Playgroud)

java android kotlin kotlin-coroutines

120
推荐指数
9
解决办法
9万
查看次数

Android SDK AsyncTask doInBackground未运行(子类)

截至2012年2月15日,我还没有找到一个很好的解释,也不知道为什么这不起作用.最接近解决方案的是使用传统的Thread方法,但为什么要包含一个在Android SDK中没有(似乎)工作的类?

Evenin'SO!

我有一个AsyncTask子类:

// ParseListener had a callback which was called when an item was parsed in a
// RSS-xml, but as stated further down it is not used at all right now.
private class xmlAsync extends AsyncTask<String, RSSItem, Void> implements ParseListener
Run Code Online (Sandbox Code Playgroud)

这是这样执行的:

xmlAsync xmlThread = new xmlAsync();

xmlThread.execute("http://www.nothing.com");
Run Code Online (Sandbox Code Playgroud)

现在这个子类遇到了一点错误.以前它做了一些xml-parsing,但是当我注意到它的doInBackground()没有被调用时,我逐行删除它,最后以这样结束:

@Override
protected Void doInBackground(String... params) 
{
    Log.v(TAG, "doInBackground");
        return null;
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,没有记录任何内容.但是,我补充说:

@Override
protected void onPreExecute() 
{
        Log.v(TAG, "onPreExecute");
        super.onPreExecute();
}
Run Code Online (Sandbox Code Playgroud)

并且在执行线程时确实记录了该行.所以不知何故onPreExecute()被调用但不是doInBackground().我在后台同时运行另一个AsyncTask,效果很好.

我目前正在模拟器上运行应用程序,SDK版本15,Eclipse,Mac …

multithreading android android-emulator android-asynctask

90
推荐指数
5
解决办法
7万
查看次数

AsyncTask doInBackground不运行

我遇到了AsyncTask类的问题.在创建4个或5个任务后,我的任务似乎停止了.

我有2个活动.MainActivity只包含一个按钮,用于启动名为ImageActivity的第二个活动.

ImageActivity非常简单.它有一个onCreate设置布局,然后它启动一个新的AsyncTask,从Internet加载图像.这在前几次工作正常.但它突然停止工作.每次运行onPreExecute方法,但不运行doInBackground方法.我试图用睡眠循环简化doInBackground,同样的事情发生了.我无法理解这种行为,因为asynctask在onDestroy方法中都被取消并设置为null.所以每次我开始一个新的ImageActivity,我也会创建一个新的AsyncTask.

我通过点击后退按钮重新创建ImageActivity和任务,而不是单击MainActivity上的按钮.

任何人的想法?我真的很挣这个.

更新:启动ImageActivity的代码(在onClickListener按钮内)

Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
intent.setClassName(this, ImageActivity.class.getName());
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

上面的代码开始此活动

    public class ImageActivity extends Activity {

    private AsyncTask<Void, Void, Void> task;

    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.main);

        task = new AsyncTask<Void, Void, Void>() {

            @Override
            protected void onPreExecute()
            {
                Log.d(TAG, "onPreExecute()");
            }

            @Override
            protected Void doInBackground(Void... params)
            {
                Log.d(TAG, "doInBackground() -- Here is the download");
                // downloadBitmap("http://mydomain.com/image.jpg")
                return null;
            }

            @Override
            protected void onPostExecute(Void res)
            {
                Log.d(TAG, "onPostExecute()");
                if(isCancelled()){
                    return;
                }
            }
        }.execute(); …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask

34
推荐指数
3
解决办法
4万
查看次数

并行执行多个AsyncTask

我正在使用Android SDK 4.0.3 API15,我希望并行运行多个AsyncTasks.我从Web服务器获取数据并实时动画(10 fps).但是根据用户操作,我还需要将一些数据发送到Web服务器.当发生这种情况时,我的动画暂停一小段时间(发送数据进入队列并获取数据等待它完成)因此我无法捕捉实时.

这个答案很有说服力,但我无法使其发挥作用.所以任何帮助都将非常感激.

我想我需要使用这个功能来实现:

AsyncTask.executeOnExecutor(Executor exec, Params... params)
Run Code Online (Sandbox Code Playgroud)

但我无法将执行程序作为参数传递,我无法实例化执行程序.这是我的AsyncTask类:

public class GetPlayers extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... urls) {

        Thread.currentThread().setPriority(Thread.MAX_PRIORITY);

        rawData="";
        for (String url : urls) {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet httpGet = new HttpGet(url);
            try {
                HttpResponse execute = client.execute(httpGet);
                InputStream content = execute.getEntity().getContent();

                BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
                if((rawData = buffer.readLine()) == null){
                    rawData = "error";
                }

            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return …
Run Code Online (Sandbox Code Playgroud)

parallel-processing android android-asynctask

29
推荐指数
1
解决办法
4万
查看次数

是否可以同时运行多个AsyncTask?

我的应用程序中有两个活动.在我的活动A中,我使用一个AsyncTask,第二个活动B也使用另一个AsyncTask.在我的活动A中,我将一些数据上传到服务器,在我的活动B中,我正在尝试从服务器下载一些其他数据.这两个都在AsyncTask中运行.我的问题是当我尝试从Activity中下载数据时,onPreExecute()调用了Activity B 方法,但是doInBackground()没有调用方法,它正在等待第一个Activity A的doInBackground()操作完成.为什么会这样?是否可以同时运行多个后台操作..

在活动A中

ImageButton submit_button = (ImageButton) findViewById(R.id.submit_button);

submit_button.setOnClickListener(new OnClickListener() 
    {
        public void onClick(View record_button) 
        {
                       new Save_data().execute();
        }
       });
class Save_data extends AsyncTask<String, Integer, Integer> 
 {
    protected void onPreExecute() 
    {

}
    protected Integer doInBackground(String... arg0) 
{
     //uploading data here
    }

 }
Run Code Online (Sandbox Code Playgroud)

在我的活动B中

ImageButton get_button = (ImageButton) findViewById(R.id.get_button);
    get_button.setOnClickListener(new OnClickListener() 
        {
            public void onClick(View record_button) 
            {
                           new download_process().execute();
            }
           });
    class download_process extends AsyncTask<String, integer, integer>
     {
        protected void onPreExecute() 
        {
       Log.e("pre-execute","has …
Run Code Online (Sandbox Code Playgroud)

android

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

你能在一个Activity中有两个AsyncTasks吗?

我已经开发了一个Activity,它将解析JSON数据并在ListView中显示结果.我正在为此目的使用AsyncTask.

我现在想要的是,当我点击ListView中的某个项目时,该文件应该开始下载.我可以在同一个活动中编写另一个AsyncTask,以便这个AsyncTask会为我做下载工作吗?在同一个活动中有多个AsyncTasks有什么问题吗?

android android-asynctask

14
推荐指数
2
解决办法
4332
查看次数

要设置的值:"Minimum Required SDK","Target SDK"和"Compile with"

我知道有很多问题,我也读过这个页面.但是,我仍然对确切的选择感到困惑.

如果我有一部运行Android 2.3.6的手机

我知道Minimum Required SDK应该是我的应用支持的Android的最低版本.因此,例如,我会选择Android 2.2或小于该值Android 1.5


令人困惑的部分Target SDKCompile with

我在下面安装了以下内容:( Android 2.3.6SDK管理器中没有)

Android 4.2.2(API 17)
Android 3.0(API 11)
Android 2.3.3(API 10)
Android 2.2(API 8)

Target SDK应设置为这是最大的Android 4.2.2,不管是什么我的手机使用; 这是Android 2.3.6

选择Android 4.2.2将涵盖下面的所有手机?是对的吗?

要么

它应该设置为我的手机的确切/最接近的值.这是可用的Android 2.3.3?但不要超过我的手机Android 2.3.6


Compile with必须设置为最大值Android 4.2.2还是什么?

sdk android

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

Fragmenttabhost性能很慢?

我使用v4 support libFragmentTabHost

要求是当我将标签切换到另一个和另一个标签时,即调用

每次onCreateView()和onActivityCreated().

这就是我的代码性能很慢的原因.

那么,还有其他解决方案吗 如何提高片段选项卡的性能?

android fragment fragment-tab-host

9
推荐指数
2
解决办法
2858
查看次数

Android 4.0 asynctask同时不可能

我有同样的问题同时运行多个AsyncTasks - 不可能吗? 除了我使用android 4.0与android:minSdkVersion ="14".

我试过他的例子,并得到:

bar bar bar
bar bar bar
bar bar bar
Run Code Online (Sandbox Code Playgroud)

编辑:

我在这里找到了解决方案

而不是使用:

task.execute();
Run Code Online (Sandbox Code Playgroud)

使用 :

task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
Run Code Online (Sandbox Code Playgroud)

multithreading android android-asynctask android-4.0-ice-cream-sandwich

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