Implementing a Count down timer using Service in the background

余生长醉 提交于 2019-12-03 07:17:58

use bindService(Intent service, ServiceConnection conn, int flag) to bind your countdown service, then in your service, return your binder that contain your count, and in your activity, a instantiated ServiceConnection object can handle the binder. AIDL can do this as well, suggest have a look at how to bind service firstly, wish can help you.

demo

public class BindService extends Service{
private int count;
private boolean quit;
private MyBinder binder = new MyBinder();
// My Binder
public class MyBinder extends Binder
{
    public int getCount()
    {
        // get the counting status:count
        return count;
    }
}

@Override
public IBinder onBind(Intent intent)
{
    System.out.println("Service is Binded");
    // return the binder instance
    return binder;
}

@Override
public void onCreate()
{
    super.onCreate();
    System.out.println("Service is Created");
    // counting work
    new Thread()
    {
        @Override
        public void run()
        {
            while (!quit)
            {
                try
                {
                    Thread.sleep(1000);
                }
                catch (InterruptedException e)
                {
                }
                count++;
            }
        }
    }.start();      
}
// invoke when the service unbind
@Override
public boolean onUnbind(Intent intent)
{
    System.out.println("Service is Unbinded");
    return true;
}

@Override
public void onDestroy()
{
    super.onDestroy();
    this.quit = true;
    System.out.println("Service is Destroyed");
}

@Override
public void onRebind(Intent intent) 
{
    super.onRebind(intent);
    this.quit = true;
    System.out.println("Service is ReBinded");
}   

}

and then the activity

public class MainActivity extends Activity{
Button bind , unbind , getServiceStatus;
BindService.MyBinder binder;
// define a ServiceConnection object
private ServiceConnection conn = new ServiceConnection()
{
    // then the Activity connected with the Service, this will be called
    @Override
    public void onServiceConnected(ComponentName name
        , IBinder service)
    {
        System.out.println("--Service Connected--");
        // achieve MyBinder instance
        binder = (BindService.MyBinder) service;
    }
    // then the connection break off
    @Override
    public void onServiceDisconnected(ComponentName name)
    {
        System.out.println("--Service Disconnected--");         
    }
};
@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    bind = (Button) findViewById(R.id.bind);
    unbind = (Button) findViewById(R.id.unbind);
    getServiceStatus = (Button) findViewById(R.id.getServiceStatus);

    final Intent intent = new Intent();

    intent.setAction("org.crazyit.service.BIND_SERVICE");       
    bind.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View source)
        {
            //bind Serivce
            bindService(intent , conn , Service.BIND_AUTO_CREATE);  
        }
    });
    unbind.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View source)
        {
            //unbind Serivce
            unbindService(conn);
        }
    }); 
    getServiceStatus.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View source)
        {
            // Toast to show the conut value
            Toast.makeText(MainActivity.this
                , "Serivce's count value is:" + binder.getCount()
                , 4000)
                .show();
        }
    });
}}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!