Android Serviceでは他のコンポーネントにデータを返信します.

2202 ワード

1.簡単な方法で、ブロードキャストを使用します.サービスではデータを処理してブロードキャストを送信し,受信が必要な場所でブロードキャストを受信する.
2.コールバックインタフェースを使用します.コールバックを作成する場所は、データを処理する場所が多く、ここにインターネットなどを書く.次のようになります.
public class UpdateLiveDataService extends Service {

    private WriteToDbListener mWriteToDbListener;

    public interface WriteToDbListener {
        void onWriteFinish();
    }

    public void setWriteToDbListener(WriteToDbListener listener) {
        mWriteToDbListener = listener;
    }

    /**
     *     Binder  
     */
    @Override
    public IBinder onBind(Intent intent) {
        return new MsgBinder();
    }

    public class MsgBinder extends Binder {
        /**
         *     Service   
         * @return
         */
        public UpdateLiveDataService getService(){
            return UpdateLiveDataService.this;
        }
    }

    ...        
    LogUtil.i(this,"mWriteToDbListener="+mWriteToDbListener);
    if (mWriteToDbListener != null) {
        mWriteToDbListener.onWriteFinish();
    }

}
 
   
   
  

使用回调的地方:

 private void registerWriteToDbListener() {
        //  Service,   service   5.0          
        Intent intent = new Intent();
        intent.setAction("lenovo.com.ismartvlive.UPDATE");
        intent.setPackage(getPackageName());
        bindService(intent, conn, Context.BIND_AUTO_CREATE);
    }

    ServiceConnection conn = new ServiceConnection() {
        @Override
        public void onServiceDisconnected(ComponentName name) {

        }

        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            //    MsgService  
            mUpdateLiveDataService = ((UpdateLiveDataService.MsgBinder)service).getService();

            mUpdateLiveDataService.setWriteToDbListener(new UpdateLiveDataService.WriteToDbListener() {
                @Override
                public void onWriteFinish() {
                    LogUtil.i(this, "write to Db finish,isFirstTune:"+isFirstTune);
                    if (isFirstTune) {
                        startPlayLastTuneChannel();
                    }
                }
            });

        }
    };