相关疑难解决方法(0)

java.lang.Thread.interrupt()做什么?

你能解释一下java.lang.Thread.interrupt()调用时会发生什么吗?

java multithreading

199
推荐指数
5
解决办法
12万
查看次数

取消执行AsyncTask的理想方法

我在后台线程中运行远程音频文件获取和音频文件播放操作AsyncTask.甲Cancellable进度条示出了用于提取操作运行的时间.

我想AsyncTask在用户取消(决定)操作时取消/中止运行.处理这种情况的理想方式是什么?

android android-asynctask

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

使用OKHttp,AsyncTask中的同步请求和OKhttp异步请求之间有什么区别?

OKHttp支持同步和异步api.如果我想发出异步请求,我可以:

  1. 使用AsyncTask,并发出OKhttp同步api.
  2. 发出OKhttp异步api.

这两个选项有什么区别?哪一个更好?

android network-programming android-asynctask okhttp

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

要强制取消AsyncTask不应该在doInBackground中定期检查的标志是volatile吗?

我想强制取消AsyncTask.我看到你可以像这个有效的解决方案一样使用isCancelled()(它在引擎盖下使用AtomicBoolean.

但是我看到了像suspiciousSolution1,suspiciousSolution2,suspiciousSolution3这样的解决方案,其中引入了新的标志private boolean isTaskCancelled = false;.

我开始想知道 - 因为那个标志被修改了

public void cancelTask(){
   isTaskCancelled = true;
}
Run Code Online (Sandbox Code Playgroud)

它在某些线程上运行,并被读入

protected Void doInBackground( Void... ignoredParams ) {
    //Do some stuff
    if (isTaskCancelled()){
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

WorkerThread中运行,然后标志不应该isTaskCancelled是volatile(或者像Google的实现中的AtomicBoolean).

multithreading android volatile synchronized android-asynctask

10
推荐指数
1
解决办法
264
查看次数

强制停止阻塞读取AsyncTask

我的应用程序中有一个AsyncTask:

public class myActivity extends Activity {
    private static Socket mySocket;
    private static InputStream myInputstream;
    private AsyncTask task;
    private boolean connected = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...            
        task = new UpdateTask().execute();
        ...
    }

    private class myTask extends AsyncTask<Void, String, String> {
        @Override
        protected String doInBackground(Void... v) {
            if(!connected) {
                try {
                    mySocket = new Socket();
                    mySocket.connect(new InetSocketAddress(MYIP, MYPORT));
                    myInputstream = mySocket.getInputStream();
                    connected = true;
                } catch(IOException e) { ... }
            }

            while(connected && !isCancelled()) {
                byte[] readbyte …
Run Code Online (Sandbox Code Playgroud)

java sockets android android-asynctask

9
推荐指数
1
解决办法
633
查看次数

异步图像加载,检查图像是否被回收

在阅读本文之后,我遇到了这个问题:性能提示(特别是名为"异步加载"的部分).基本上他正在尝试保存有关行的信息以查看它是否已被回收,并且只有在行仍然可见时才设置下载的图像.这就是他如何挽救这个位置:

holder.position = position;

new ThumbnailTask(position, holder)
        .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, null);
Run Code Online (Sandbox Code Playgroud)

ThumbnailTask​​构造函数是:

public ThumbnailTask(int position, ViewHolder holder) {
    mPosition = position;
    mHolder = holder;
}
Run Code Online (Sandbox Code Playgroud)

在onPostExecute()中,他然后执行前面提到的检查:

    if (mHolder.position == mPosition) {
        mHolder.thumbnail.setImageBitmap(bitmap);
    }
Run Code Online (Sandbox Code Playgroud)

我只是看不出这会给出任何结果.Holder和position在构造函数中同时设置为相同的值(holder中的位置与mPosition中的位置相同).它们在AsyncTask期间不会被更改(确实位置可能在getView()中更改,但存储在AsyncTask中作为私有成员的那些永远不会被操纵).我在这里错过了什么?

同时保存位置似乎并不是一个好的选择:我相信它不能保证是唯一的,如果我没记错,它会在滚动后重置为0.我在想正确的方向吗?

android android-listview android-asynctask

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

API.AI:如何在点击AIButton时停止AsyncTask?

我正在AIButton我的应用程序中使用,我有一个AsyncTask在AIButton被点击后执行并接收一些命令并且AsyncTask有时需要太长时间才能执行.

这是我的代码:

final AIConfiguration config = new AIConfiguration("xxx",
                AIConfiguration.SupportedLanguages.English,
                AIConfiguration.RecognitionEngine.System);

listenButton = (AIButton) findViewById(R.id.micButton);

config.setRecognizerStartSound(getResources().openRawResourceFd(R.raw.test_start));
config.setRecognizerStopSound(getResources().openRawResourceFd(R.raw.test_stop));
config.setRecognizerCancelSound(getResources().openRawResourceFd(R.raw.test_cancel));

listenButton.initialize(config);
listenButton.setResultsListener(this);
Run Code Online (Sandbox Code Playgroud)

这是AsnycTask:

class translate extends AsyncTask<String, Void, String> {

    String translatedText = "";

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        loading.setMessage("Loading");
        loading.show();
    }

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

        String text = params[0];
        String toBeConvertedIn = params[1];

        Log.d("TEXT", text);
        Log.d("TBCI", toBeConvertedIn);

        try {
            String encodedText = URLEncoder.encode(text, "UTF-8");
            HttpHandler httpHandler = new HttpHandler();
            String url = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=xxxxxxx&text=" …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask onclicklistener api-ai

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

thread.sleep和systemclock.sleep有什么区别.哪一个应该在AsyncTask中使用?

我想出如果我在中间运行AsyncTask时退出一个活动,当我再次尝试启动该活动时,我将不得不等到之前的AsyncTask在新的AsynTask启动之前完成.我尝试了thread.sleep和systemclock.sleep,它给了我相同的结果.这是有道理的,因为我猜我关闭和打开的线程是相同的.如果用户退出活动,它有一种方法可以取消AsyncTask吗?因为第二次用户输入相同的活动,他不必等到上一次完成.我在onPause()中尝试了asyntask.cancel(true),它不起作用,同样的事情发生了.

android

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

即使AsyncTask处理任务,主UI也会冻结

Service在背景上运行,从互联网收集数据并使用AsyncTask它们存储Shared Preferences.即使完成工作AsyncTask仍然冻结了我的主要活动.

以下是服务代码:

public class GetterService extends Service {

    SharedPreferences.Editor editor;
    HashMap<Integer,String> links = new HashMap<Integer,String>();

    @Override
    public void onCreate() {
        editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
        populateLinks();
    }

    private void populateLinks(){
        // Here I add links to HashMap
    }

    @Override
    public IBinder onBind(Intent intent) {
        Toast.makeText(this, "GetterService ON BIND", Toast.LENGTH_LONG).show();
        return null;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(this, "GetterService ON DESTROY", Toast.LENGTH_LONG).show();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) …
Run Code Online (Sandbox Code Playgroud)

service android android-asynctask

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

如何取消AsyncTask的当前实例并启动新的实例?

我有一个文件下载android应用程序.当用户点击listview项目时,下载了这个文件.它工作正常.现在,我想取消当前文件下载并启动下一个文件,同时用户点击其他项目,另一个下载已经在进行并在取消下载任务之前显示用户确认.

我怎样才能做到这一点?

提前致谢

android android-asynctask

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

停止AsyncTask doInBackground方法

我在类中创建了一个AsyncTask,我从一个片段调用该任务.问题是我想在片段被销毁时停止doInBackground方法.为此,我在编写AsyncTask的类中创建了一个方法,并在该方法中对Asynctask对象使用了cancel(true).当我从片段onDestroy()调用此方法时,后台进程仍在运行.Plz告诉我停止asynctask的doInBackground的正确方法.

这是编写asynctask的类

public class CarDetail implements Parcelable{

private String carId;
private String carName;
private String imageUrl;
private String thumbUrl;
private String dailyPrice;
private String weeklyPrice;
private String weekendPrice;
private String deposit;
private String minimumAge;
private String color;
private String make;
private String location;
private String bodyType;
private String fuelType;
private String transmission;
private String carType;
private String model;
private String description;
private Bitmap image;
private Bitmap thumbImage;
private CarListAdapter carAdapter;
private ImageLoadTask task = new ImageLoadTask();

public CarDetail() {
    super(); …
Run Code Online (Sandbox Code Playgroud)

android android-asynctask

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