博客
关于我
Service与Activity之间通信
阅读量:271 次
发布时间:2019-03-01

本文共 4279 字,大约阅读时间需要 14 分钟。

如何在Android中使用Service实现背景任务处理在Android开发中,Service是一种非常重要的组件类,它允许我们在应用程序运行时执行长期的、甚至在主线程之外的操作。通过Service,我们可以实现从后台执行任务、管理资源、或与其他组件进行交互等功能。在本文中,我们将详细探讨如何使用Service实现一个下载管理器,并通过Activity与Service进行交互。首先,我们需要创建一个继承自Service的类,称为MsgService。这个类将负责管理下载任务,并提供相关的操作接口。 MsgService.java```javapublic class MsgService extends Service {    public static final int MAX_PROGRESS = 100;    private int progress = 0;    public int getProgress() {        return progress;    }    public void startDownload() {        new Thread(new Runnable() {            @Override            public void run() {                while (progress < MAX_PROGRESS) {                    progress += 5;                    try {                        Thread.sleep(1000);                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }).start();    }    @Override    public IBinder onBind(Intent intent) {        return new MsgBinder();    }    public class MsgBinder extends Binder {        public MsgService getService() {            return MsgService.this;        }    }}

这个MsgService类中,定义了一个最大进度值MAX_PROGRESS,以及当前下载进度progress。类中提供了两个主要方法:getProgress()用来获取当前进度,以及startDownload()用来启动下载任务。此外,通过Binder接口,我们可以将Service与其他组件(如Activity)进行交互。

接下来,我们需要创建一个Activity来与MsgService进行交互。这个Activity将负责绑定Service、管理UI元素以及处理用户交互。

MainActivity.java

public class MainActivity extends AppCompatActivity {    private MsgService msgService;    private int progress = 0;    private ProgressBar mProgressBar;    private Button mButton;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        // 绑定Service        Intent intent = new Intent(this, MsgService.class);        bindService(intent, new ServiceConnection() {            @Override            public void onServiceDisconnected(ComponentName name) {                // Service已经解绑,进行相应的处理            }            @Override            public void onServiceConnected(ComponentName name, IBinder service) {                msgService = ((MsgService.MsgBinder) service).getService();            }        }, Context.BIND_AUTO_CREATE);        mProgressBar = findViewById(R.id.progressBar1);        mButton = findViewById(R.id.button1);        mButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                msgService.startDownload();                listenProgress();            }        });    }    @Override    protected void onDestroy() {        super.onDestroy();        unbindService(new ServiceConnection() {            @Override            public void onServiceDisconnected(ComponentName name) {                // Service已经解绑,进行相应的处理            }            @Override            public void onServiceConnected(ComponentName name, IBinder service) {                // 不需要处理            }        });    }    private void listenProgress() {        new Thread(new Runnable() {            @Override            public void run() {                while (progress < MsgService.MAX_PROGRESS) {                    progress = msgService.getProgress();                    try {                        Thread.sleep(1000);                        runOnUiThread(new Runnable() {                            @Override                            public void run() {                                Toast.makeText(MainActivity.this, "下载进度:" + progress, Toast.LENGTH_SHORT).show();                            }                        });                    } catch (InterruptedException e) {                        e.printStackTrace();                    }                }            }        }).start();    }}

在这个MainActivity中,我们首先绑定了MsgService,通过ServiceConnection接口监听Service的连接状态。当Service连接成功后,我们可以通过MsgBinder获取到MsgService实例。用户点击按钮后,会调用startDownload()方法,启动下载任务,并通过listenProgress()方法监听下载进度。

最后,我们需要在AndroidManifest.xml中注册MsgService,确保系统可以正确地启动和管理这个Service。

AndroidManifest.xml

通过以上代码和配置,我们成功创建并优化了一个Android Service应用,这个应用可以在后台执行下载任务,并通过UI元素反馈进度信息。这种设计模式在Android开发中非常常见,适用于需要长期运行或管理资源的场景。

转载地址:http://dfzo.baihongyu.com/

你可能感兴趣的文章
MySQL-Explain的详解
查看>>
mysql-group_concat
查看>>
MySQL-redo日志
查看>>
MySQL-【1】配置
查看>>
MySQL-【4】基本操作
查看>>
Mysql-丢失更新
查看>>
Mysql-事务阻塞
查看>>
Mysql-存储引擎
查看>>
mysql-开启慢查询&所有操作记录日志
查看>>
MySQL-数据目录
查看>>
MySQL-数据页的结构
查看>>
MySQL-架构篇
查看>>
MySQL-索引的分类(聚簇索引、二级索引、联合索引)
查看>>
Mysql-触发器及创建触发器失败原因
查看>>
MySQL-连接
查看>>
mysql-递归查询(二)
查看>>
MySQL5.1安装
查看>>
mysql5.5和5.6版本间的坑
查看>>
mysql5.5最简安装教程
查看>>
mysql5.6 TIME,DATETIME,TIMESTAMP
查看>>