Android service 的使用

  https://github.com/ww7hcom/Android-common 

創(chuàng)建service基類

package com.ww7h.ww.common.bases.service;

import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Binder;
import android.os.IBinder;


/**
 * Created by: Android Studio.
 * PackageName: com.ww7h.ww.common.bases.service
 * DateTime: 2019/3/25 15:24
 * @author ww
 */
public abstract class BaseService<T extends Service> extends Service implements ServiceInterface, ServiceConnection{

    protected ServiceBinder mBinder = new ServiceBinder();
    protected Context mContext;
    protected ConnectionCallBack mConnectionCallBack;

    /**
     * 獲取當(dāng)前頁(yè)面的service的實(shí)例
     * @return 獲取當(dāng)前service的實(shí)例
     */
    protected abstract T getThisService();

    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    @Override
    public void bindService(Context context, Intent intent, ConnectionCallBack connection ,int flag) {
        mContext = context;
        intent.setClass(context, this.getClass());
        context.bindService(intent, this, flag);
    }

    @Override
    public void unbindService(ServiceConnection connection) {
        if (mContext != null) {
            mContext.unbindService(connection);
        }
    }

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        if (mConnectionCallBack != null) {
            mConnectionCallBack.onServiceConnected(name,(ServiceBinder) service);
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {
        if (mConnectionCallBack != null) {
            mConnectionCallBack.onServiceDisconnected(name);
        }
    }

    @Override
    public void onBindingDied(ComponentName name) {

    }

    @Override
    public void onNullBinding(ComponentName name) {

    }

    public class ServiceBinder extends Binder {
        /**
         * 獲取當(dāng)前service
         * @return 返回service實(shí)例
         */
        public  T getService() {
            return getThisService();
        }
    }
}

創(chuàng)建操作接口

package com.ww7h.ww.common.bases.service;

import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;

/**
 * Created by: Android Studio.
 * PackageName: com.ww7h.ww.common.bases.service
 * User: ww
 * DateTime: 2019/3/25 16:32
 */
public interface ServiceInterface {

    /**
     * 綁定service
     * @param context 當(dāng)前界面service
     * @param intent 綁定攜帶的參數(shù)
     * @param connection 連接回調(diào)
     * @param flag 連接標(biāo)識(shí)
     */
    void bindService(Context context, Intent intent, ConnectionCallBack connection , int flag);

    /**
     * 接觸service綁定
     * @param connection 鏈接
     */
    void unbindService(ConnectionCallBack connection);

    /**
     * 開始
     */
    void startDO();

    /**
     * 停止
     */
    void stopDO();

    interface ConnectionCallBack {

        /**
         * service連接成功
         * @param name ComponentName
         * @param service BaseService.ServiceBinder
         */
        <T extends Service> void onServiceConnected(ComponentName name, BaseService<T>.ServiceBinder service);

        /**
         * service連接斷開
         * @param name ComponentName
         */
        void onServiceDisconnected(ComponentName name);

    }

}

定義具體service

package com.ww7h.androidutil.main.service;

import android.content.Intent;
import android.util.Log;
import com.ww7h.ww.common.apis.http.okhttp.HttpOkHttp;
import com.ww7h.ww.common.bases.service.BaseService;

/**
 * Created by: Android Studio.
 * Project Nam: AndroidUtil
 * PackageName: com.ww7h.androidutil.main.service
 * DateTime: 2019/3/25 18:39
 *
 * @author ww
 */
public class MainService extends BaseService<MainService> {
    @Override
    protected MainService getThisService() {
        return this;
    }

    @Override
    public void unbindService(ConnectionCallBack connection) {

    }

    @Override
    public void startDO() {
        HttpOkHttp.getInstance().requestGet("https://www.baidu.com", new HttpOkHttp.OkHttpCallBack<String>() {
            @Override
            public void requestSuccess(String s) {
                Intent intent = new Intent();
                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                intent.setAction("com.ww7h.main_request");
                intent.putExtra("result", s);
                mContext.sendBroadcast(intent);
            }

            @Override
            public void requestFailure(String message) {
                Log.e("ww7h", "requestFailure" + message );
            }
        }, String.class);
    }

    @Override
    public void stopDO() {
    }
}

調(diào)用谍倦,配合使用BroadcastReceiver更新UI

package com.ww7h.androidutil.main

import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.support.v7.widget.LinearLayoutManager
import android.util.Log
import com.ww7h.androidutil.R
import com.ww7h.androidutil.main.adapter.MainAdapter
import com.ww7h.androidutil.main.model.MainModel
import com.ww7h.androidutil.main.service.MainService
import com.ww7h.androidutil.sign.AppSignActivity
import com.ww7h.ww.common.bases.activity.BaseActivity
import com.ww7h.ww.common.bases.broadcast.BroadcastReceiverInterface
import com.ww7h.ww.common.bases.broadcast.CommonBroadcastReceiver
import com.ww7h.ww.common.bases.service.BaseService
import com.ww7h.ww.common.bases.service.ServiceInterface
import com.ww7h.ww.common.bases.view.recyclerview.decoration.SpaceItemDecoration
import com.ww7h.ww.common.listeners.OnRecyclerItemClick
import com.ww7h.ww.common.utils.DensityUtil
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : BaseActivity<MainActivity>() , OnRecyclerItemClick<MainModel>,
     ServiceInterface.ConnectionCallBack, BroadcastReceiverInterface.BroadcastReceiverCallBack {


    private lateinit var adapter : MainAdapter
    private lateinit var clickModel : MainModel
    private lateinit var serviceInterface:ServiceInterface
    private lateinit var broadcastReceiverInterface: BroadcastReceiverInterface

    override val contentView: Int
        get() = R.layout.activity_main

    override fun initAction() {

    }

    override fun initView() {
        title = "??工具大全"
        adapter = MainAdapter(this, this)
        app_util_rv.layoutManager = LinearLayoutManager(this)
        app_util_rv.adapter = adapter
        app_util_rv.addItemDecoration( SpaceItemDecoration(DensityUtil.dp2px(this,1f),1))

        val mainArray = object : java.util.ArrayList<MainModel>(){
            init {
                add(MainModel("應(yīng)用信息", AppSignActivity::class.java))
            }
        }
        adapter.addDataList(mainArray)

        broadcastReceiverInterface = CommonBroadcastReceiver()
        broadcastReceiverInterface.register(this, "com.ww7h.main_request", this)

        serviceInterface = MainService()
        val intent = Intent()
        serviceInterface.bindService(this, intent, this, 0x1001)
    }

    override fun onItemClick(t: MainModel?) {
        clickModel = t!!
        serviceInterface.startDO()
    }

    override fun onDestroy() {
        serviceInterface.unbindService(this)
        super.onDestroy()
    }

    override fun onServiceDisconnected(name: ComponentName?) {
        serviceInterface.stopDO()
    }

    override fun onServiceConnected(name: ComponentName?, service: BaseService<*>.ServiceBinder?) {

    }

    override fun receiverCallBack(context: Context?, intent: Intent?) {
        Log.e("ww7h", intent?.getStringExtra("result"))
        val intent = Intent()
        intent.setClass(applicationContext, clickModel.activityClass!!)
        intent.putExtra("title", clickModel.utilName)
        startActivity(intent)
    }

}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市牧嫉,隨后出現(xiàn)的幾起案子剂跟,更是在濱河造成了極大的恐慌,老刑警劉巖酣藻,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曹洽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辽剧,警方通過查閱死者的電腦和手機(jī)送淆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)怕轿,“玉大人偷崩,你說我怎么就攤上這事∽灿穑” “怎么了阐斜?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)诀紊。 經(jīng)常有香客問我谒出,道長(zhǎng),這世上最難降的妖魔是什么邻奠? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任笤喳,我火速辦了婚禮,結(jié)果婚禮上碌宴,老公的妹妹穿的比我還像新娘杀狡。我一直安慰自己,他們只是感情好贰镣,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布呜象。 她就那樣靜靜地躺著膳凝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恭陡。 梳的紋絲不亂的頭發(fā)上鸠项,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音子姜,去河邊找鬼。 笑死楼入,一個(gè)胖子當(dāng)著我的面吹牛哥捕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嘉熊,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼遥赚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了阐肤?” 一聲冷哼從身側(cè)響起凫佛,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎孕惜,沒想到半個(gè)月后愧薛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伺通,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逢唤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年虑乖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了箩做。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片航罗。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靴寂,死狀恐怖塘揣,靈堂內(nèi)的尸體忽然破棺而出辛掠,到底是詐尸還是另有隱情弥激,我是刑警寧澤进陡,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站微服,受9級(jí)特大地震影響趾疚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜职辨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一盗蟆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舒裤,春花似錦喳资、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鲜滩。三九已至,卻和暖如春节值,著一層夾襖步出監(jiān)牢的瞬間徙硅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工搞疗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嗓蘑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓匿乃,卻偏偏與公主長(zhǎng)得像桩皿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子幢炸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349