Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidで実行中のAsyncTaskをキャンセルするにはどうすればよいですか?


例に入る前に、AndroidのAsyncTaskとは何かを知っておく必要があります。 AsyncTaskは、バックグラウンドスレッドで操作/アクションを実行し、メインスレッドで更新します。バックグラウンドスレッドでバックグラウンド操作を実行しているときに、ユーザーは次のコードを使用して操作をキャンセルできます-

AsynTaskExample mAsyncTask = new AsyncTaskExample();
mAsyncTask.cancel(true);

この例は、Androidで実行中のAsyncTaskをキャンセルする方法を示しています。

ステップ1 − Android Studioで新しいプロジェクトを作成し、[ファイル]⇒[新しいプロジェクト]に移動して、新しいプロジェクトを作成するために必要なすべての詳細を入力します。

ステップ2 −次のコードをres / layout/activity_main.xmlに追加します。

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
   xmlns:tools = "https://schemas.android.com/tools"
   android:id = "@+id/rootview"
   android:layout_width = "match_parent"
   android:layout_height = "match_parent"
   android:orientation = "vertical"
   android:background = "#c1c1c1"
   android:gravity = "center_horizontal"
   tools:context = ".MainActivity">
   <Button
      android:id = "@+id/asyncTask"
      android:text = "Download"
      android:layout_width = "wrap_content"
      android:layout_height = "wrap_content" />
   <ImageView
      android:id = "@+id/image"
      android:layout_width = "300dp"
      android:layout_height = "300dp" />
</LinearLayout>

上記のコードでは、ボタンをクリックすると、インターネットソースから画像がダウンロードされ、imageviewに追加されます。

ステップ3 −次のコードをsrc / MainActivity.java

に追加します
package com.example.andy.myapplication;

import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
   URL ImageUrl = null;
   InputStream is = null;
   Bitmap bmImg = null;
   ImageView imageView = null;
   AsyncTaskExample asyncTask = null;
   ProgressDialog p;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Button button = findViewById(R.id.asyncTask);
      imageView = findViewById(R.id.image);
      button.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            asyncTask = new AsyncTaskExample();
            asyncTask.execute("https://www.tutorialspoint.com/images/tp-logo-diamond.png");
         }
      });
   }
   private class AsyncTaskExample extends AsyncTask {
      @Override
      protected void onPreExecute() {
         super.onPreExecute();
         p = new ProgressDialog(MainActivity.this);
         p.setMessage("Please wait...It is downloading");
         p.setIndeterminate(true);
         p.setCancelable(true);
         p.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
               asyncTask.cancel(true);
               Toast.makeText(MainActivity.this,"AsyncTask is stopped",Toast.LENGTH_LONG).show();
            }
         });
         p.show();
      }
      @Override
      protected Bitmap doInBackground(String... strings) {
         try {
            try {
               Thread.sleep(10000);
            } catch (InterruptedException e) {
               e.printStackTrace();
            }
            ImageUrl = new URL(strings[0]);
            HttpURLConnection conn = (HttpURLConnection) ImageUrl .openConnection();
            conn.setDoInput(true);
            conn.connect();
            is = conn.getInputStream();
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inPreferredConfig = Bitmap.Config.RGB_565;
            bmImg = BitmapFactory.decodeStream(is, null, options);
         } catch (IOException e) {
            e.printStackTrace();
         }
         return bmImg;
      }
      @Override
      protected void onPostExecute(Bitmap bitmap) {
         super.onPostExecute(bitmap);
         if(imageView! = null) {
            p.hide();
            imageView.setImageBitmap(bitmap);
         } else {
            p.show();
         }
      }
   }
}

ステップ4 −次のコードをmanifest.xmlに追加します

<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android = "https://schemas.android.com/apk/res/android"
   package = "com.example.andy.myapplication">
   <uses-permission android:name = "android.permission.INTERNET"/>
   <application
      android:allowBackup = "true"
      android:icon = "@mipmap/ic_launcher"
      android:label = "@string/app_name"
      android:roundIcon = "@mipmap/ic_launcher_round"
      android:supportsRtl = "true"
      android:theme = "@style/AppTheme">
      <activity android:name = ".MainActivity">
         <intent-filter>
            <action android:name = "android.intent.action.MAIN" />
            <category android:name = "android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   </application>
</manifest>
>

上記のコードでは、インターネットソースから画像を取得するためのインターネット許可を与えています。

アプリケーションを実行してみましょう。実際のAndroidモバイルデバイスをコンピューターに接続していると思います。 android studioからアプリを実行するには、プロジェクトのアクティビティファイルの1つを開き、ツールバーの[アイコンの実行]をクリックします。オプションとしてモバイルデバイスを選択し、デフォルトの画面を表示するモバイルデバイスを確認します-

Androidで実行中のAsyncTaskをキャンセルするにはどうすればよいですか?

上記のボタンをクリックすると、プログレスバーが起動します。プログレスバーではなく任意の場所をクリックすると、次の画面が表示されます。

Androidで実行中のAsyncTaskをキャンセルするにはどうすればよいですか?

上の画面は、非同期タスクが停止し、画像がインターネットソースからダウンロードされていることを明確に示しています。

Androidで実行中のAsyncTaskをキャンセルするにはどうすればよいですか?

非同期タスクを停止しない場合は、上記のように画像がダウンロードされます


  1. AndroidでAsyncTaskスレッドを停止する方法は?

    この例は、AndroidでAsynchTaskスレッドを停止する方法を示しています。 ステップ1 − Android Studioで新しいプロジェクトを作成し、[ファイル]⇒[新しいプロジェクト]に移動して、新しいプロジェクトを作成するために必要なすべての詳細を入力します。 ステップ2 −次のコードをres / layout/activity_main.xmlに追加します。 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout    xmlns:androi

  2. AndroidでAsyncTaskのタイムアウトを設定するにはどうすればよいですか?

    この例は、AndroidでAsyncTaskのタイムアウトを設定する方法を示しています。 ステップ1 − Android Studioで新しいプロジェクトを作成し、[ファイル]⇒[新しいプロジェクト]に移動して、新しいプロジェクトを作成するために必要なすべての詳細を入力します。 ステップ2 −次のコードをres / layout/activity_main.xmlに追加します。 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="htt