设为首页 加入收藏

TOP

Android_实用技术(3)—— Service简析(Ⅱ)(一)
2017-10-13 09:42:49 】 浏览:4019
Tags:Android_ 实用技术 Service 简析

  我们在Service(Ⅰ)中了解了Service最基本的知识点,今天我们继续学习Service这个组件(神器)

  先来说一下Service的生命周期:跟Activity相比,Service的生命周期就太简单了:onCreate()->onStart()->onDestroy()

----------------------------------------------------------------------------------------------------------------------------------------

  【主题】:Activity与Service之间的Communication

  【问题】:由上贴我们知道,当我们点击START SERVICE按钮后,服务的onCreate()和onStartCommand()方法会得到执行,此后Service是一直存在于后台运行的,Activity无法控制Service中具体的逻辑运行,那么这样Activity只相当于起到一个通知的作用,除了告诉Service你可以开始工作了。那么这样显然会分离两者之间的关联性,这也不是我们需要的结果!

  【后果】:如果出现以上的问题,那么在我们平时的项目开发过程中(拿小编做手机开发项目而言),一直存在的Service很有可能会引起功耗的问题,这将严重影响手机的运行效率

  【要求】:我们能否将Activity与Service建立一种联系,当Activity终结之时,Service也销毁,也就是有没有办法让Activity和Service能够“不求同生,但求共死”

  答案是肯定的!这就涉及到Service的另一个重要知识点:绑定解绑

  直接代码走起,看过来:

(1)MyService.java

public class MyService extends Service{
  
private static final String TAG = "MyService";
  
private DownloadBinder mBinder = new DownloadBinder();       // 定义一个DownloadBinder类
  
class DownloadBinder extends Binder {   // 让DownloadBinder成为Binder的子类     public void startDownload() {                      // 定义开始下载的方法       Log.d(TAG, "startDownload executed");     }     public int getProgress() {    // 定义一个查看下载进度的方法       Log.d(TAG, "getProgress executed");       return 0;     }   }   @Nullable   @Override   public IBinder onBind(Intent intent) { // onBind()方法,这个方法将在绑定后调用     return mBinder; // 返回IBinder的实例 --> DownloadBinder类的实例   }   ... // 这边就是之前定义好的onStart()、onStartCommand()、onDestroy()三个方法 }

  (2)接下来,我们在Layout中添加两个按钮 BIND SERVICE 和 UNBIND SERVICE

                                  

 

  (3)MainActivity.java

public class MainActivity extends Activity implements View.OnClickListener{
  
private ServiceConnection connection = new ServiceConnection() { // 创建一个ServiceConnection的匿名内部类     @Override     public void onServiceConnected(ComponentName name, IBinder service) { // 重写onServiceConnected()方法       MyService.DownloadBinder downloadBinder = (MyService.DownloadBinder) service; // 向下转型取得downloadBinder实例       downloadBinder.startDownload(); // 在Activity中调用Service的方法       downloadBinder.getProgress(); // 在Activity中调用Service的方法     }
    @Override     
public void onServiceDisconnected(ComponentName name) { // 重写onServiceDisconnected()方法     }   };
  @Override   
protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);     Button startService = (Button) super.findViewById(R.id.start_service);     Button stopService = (Button) super.findViewById(R.id.stop_service);     Button bindService = (Button) super.findViewById(R.id.bind_service);     Button unbindService = (Button) super.findViewById(R.id.unbind_service); // 不解释!!!     startService.setOnClickListener(this);     stopService.setOnClickListener(this);     bindService.setOnClickListener(this);     unbindService.setOnClickListener(this);   }
  @Override   
public void onClick(View v) {     switch (v.getId()) {       case R.id.start_service:         Intent startIntent = new Intent(this, MyService.class);            // START 服务 --> onCreate() --> onStartCommand()         startService(startIntent);         break;       case R.id.stop_service:         Intent stopIntent = n
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇android TextView多行文本(超过3.. 下一篇Android Studio git 版本回退到最..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目