Android中如何使用基于回调的事件处理

版权声明:文章内容系为本人原创,如需转载,请注明出处。 https://blog.csdn.net/weixin_43778720/article/details/88072229
  1. 编写接口
    public interface DownloadCallback {
    
        void startDownload();
    
        void updateProgress(int progress);
    
        void finishedDownload();
    }
    
  2. 编写事件源
    public class HttpUtil {
        private Timer mTimer;
        private TimerTask mTimerTask;
        private DownloadCallback mCallback;
        public void setCallback(DownloadCallback callback) {
            this.mCallback = callback;
        }
        public HttpUtil() {
            mTimer = new Timer();
            mTimerTask = new TimerTask() {
                int i = 0;
                @Override
                public void run() {
                    if (i < 100) {
                        mCallback.updateProgress(i++);
                    } else {
                        mCallback.finishedDownload();
                        mTimer.cancel();
                    } } };
        }
        public void donwload() {
            mCallback.startDownload();
            mTimer.schedule(mTimerTask, 1000, 50);
        }}
    
  3. 设置事件
    public class DownloadActivity extends Activity implements DownloadCallback {
        private HttpUtil mHttpUtil;
        private final String TAG = DownloadActivity.class.getSimpleName();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_download);
    	  mHttpUtil = new HttpUtil();
            mHttpUtil.setCallback(this);
        }
        @Override
        public void startDownload() {
            Log.i(TAG, "开始下载");
        }
        @Override
        public void updateProgress(int progress) {
            Log.i(TAG, "已下载" + progress + "%");
        }
        @Override
        public void finishedDownload() {
            Log.i(TAG, "下载完成");
        }
    }
    
  4. 触发事件
       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_download);
    
            downloadBtn = findViewById(R.id.btn_download);
            mHttpUtil = new HttpUtil();
            mHttpUtil.setCallback(this);
    
            downloadBtn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mHttpUtil.donwload();
                }
            });
        }
    
  5. 查看效果
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43778720/article/details/88072229