Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在天堂OS 15.1上使用WallperManager时,异步任务无限循环 [已解决]请参见下面的答案_Java_Android_Android Asynctask - Fatal编程技术网

Java 在天堂OS 15.1上使用WallperManager时,异步任务无限循环 [已解决]请参见下面的答案

Java 在天堂OS 15.1上使用WallperManager时,异步任务无限循环 [已解决]请参见下面的答案,java,android,android-asynctask,Java,Android,Android Asynctask,我的应用程序奇怪地在无限循环中疯狂运行。这是一个简单的代码,可以下载图像并作为壁纸应用 但是当删除这行代码时,循环消失,即,AsyncTask按预期返回工作: WallpaperManager.getInstance(weakContext.get()).setBitmap(bitmap); 我已经认为问题可能是WeakReference,但即使在onPostExecute()方法中运行代码,使用侦听器执行片段中的更改,问题仍然存在 编辑 第一次尝试:使用AsyncTask 日志: 我发现

我的应用程序奇怪地在无限循环中疯狂运行。这是一个简单的代码,可以下载图像并作为壁纸应用

但是当删除这行代码时,循环消失,即,
AsyncTask
按预期返回工作:

WallpaperManager.getInstance(weakContext.get()).setBitmap(bitmap);
我已经认为问题可能是
WeakReference
,但即使在
onPostExecute()
方法中运行代码,使用
侦听器执行
片段中的更改,问题仍然存在


编辑 第一次尝试:使用AsyncTask
日志:


我发现了线程循环无限的原因,但没有找到原因。简单地说,它是一个天堂OS 15.1功能,用于更改系统的颜色以匹配壁纸或时间。当设置为匹配墙纸时,会出现错误

我正在使用自定义ROM在根设备上进行测试。这不会发生在库存ROM设备上


窃听特征


Gif演示

你在哪里调用异步任务?@Juan是的!我已经用片段代码编辑了我的提问,谁调用并执行AsyncTask您可以发布WorkerFragment类的用法吗?我希望您是在列表或循环中使用它。您可以将WorkerTast和task.execute移到onResume()而不是onCreateView()以查看是否得到相同的结果吗?@Juan onResume()的情况也一样
public class WorkerTask extends AsyncTask<String, Void, Bitmap> {

    private static final String TAG = "WorkerTask";
    private WeakReference<Context> weakContext;
    private WeakReference<ImageView> weakImage;
    private Bitmap wallpaper;
    private WallpaperListener wallpaperListener;

    WorkerTask(Context context, ImageView imageView, WallpaperListener listener){
        weakContext = new WeakReference<>(context);
        weakImage = new WeakReference<>(imageView);
        wallpaperListener = listener;
    }

    @Override
    protected Bitmap doInBackground(String... url) {
        Log.d(TAG, "doInBackground: ");

        if (url[0].isEmpty()){
            throw new NullPointerException("URL Bad formatted");
        }

        /* Network */
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url[0])
                .build();
        Response response = null;
        try {
            response = client.newCall(request).execute();

            /* Generate Image */
            wallpaper = BitmapFactory.decodeStream(
                    Objects.requireNonNull(response.body()).byteStream());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (response != null) {
                response.close();
            }
        }

        return wallpaper;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        super.onPostExecute(bitmap);

        try {
            WallpaperManager.getInstance(weakContext.get()).setBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
public class WorkerFragment extends Fragment {

    private static final String TAG = "WorkerFragment";
    private ImageView imageView;
    private TextView textView;
    private Bitmap wallpaper;

//    String UrlApi = "https://images.unsplash.com/photo-1511736515797-8aab81ec7e35?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=966f3c728ebb930b49192fdbf14b55e0&auto=format&fit=crop&w=1534&q=80";
    String UrlApi = "https://images.unsplash.com/photo-1535632788826-78ca9d09d2e7?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=bb651ad5967f2074c98b8c30ae2fc442&auto=format&fit=crop&w=695&q=80";

    public WorkerFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_worker, container, false);

        imageView = rootView.findViewById(R.id.imageView);
        TextView textView = rootView.findViewById(R.id.textView);

        return rootView;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d(TAG, "onActivityCreated: ");

        final Runnable setImage = new Runnable() {
            @Override
            public void run() {
                Log.d(TAG, "run2: ");
                imageView.setImageBitmap(wallpaper);
                setWallpaper(wallpaper);
            }
        };

        Runnable getImage = new Runnable() {
            @Override
            public void run() {
                Log.d(TAG, "run1: ");
                wallpaper = getWallpaper();
                imageView.post(setImage);
            }
        };

        Thread workerThread = new Thread(getImage);
        workerThread.start();
    }

    private Bitmap getWallpaper(){

        Request request = new Request.Builder()
                .url(UrlApi)
                .build();

        OkHttpClient client = new OkHttpClient();

        Bitmap bitmap = null;
        try {
            Response response = client.newCall(request).execute();
            bitmap = BitmapFactory.decodeStream(response.body().byteStream());
        } catch (IOException e) {
            e.printStackTrace();
        }

        return bitmap;
    }

    private void setWallpaper(Bitmap bitmap){
        WallpaperManager wallpaperManager = WallpaperManager.getInstance(getActivity().getApplicationContext());
        try {
            wallpaperManager.setBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}