Tv App Develop of TvServer Service

来源:互联网 发布:淘宝流量钱包兑换 编辑:程序博客网 时间:2024/06/04 18:58

The following article is mainly recording the following develop skills.
–>How to Create a service
–>How to bind/start a service
–>load static lib

1: TvServerService
create looper handler and thread

public class TvServerService extends Service {    private static final String TAG = "TvServerService";    private boolean isTvServerStarted = false;    private TvServerServiceHandler mTvserverHandler = null;    private static final int StartTvserverService = 1;    public TvServerService () {        HandlerThread thread = new HandlerThread("TvServerServiceLooper");        thread.start();        mTvserverHandler = new TvServerServiceHandler(thread.getLooper());    }    private class TvServerServiceHandler extends Handler {        public TvServerServiceHandler(Looper looper) {            super(looper);        }        public synchronized void handleMessage(Message msg) {            if (msg.arg1 == StartTvserverService) {                Log.d(TAG, "Creating DB wrapper");                Log.d(TAG, "onBind:startTvServer");                startTvServer();                isTvServerStarted = true;            }        }    };}

2: bind the service

    private void startTvServerService(Context context) {        Log.d(TAG, "Starting TvServerService");        Intent tvServerIntent = new Intent(                "org.droidtv.tvserver.TvServerService");        context.startService(tvServerIntent);    }

as the service received the intent, it will do

public IBinder onBind(Intent intent) {        Log.d(TAG, "onBind > isTvServerStarted: " + isTvServerStarted);        if (isTvServerStarted == false) {            Message     msg = new Message();            msg.arg1 = StartTvserverService;            mTvserverHandler.sendMessage(msg);        }        return null;    }public int onStartCommand(Intent intent, int flags, int startId) {        super.onStartCommand(intent, flags, startId);        Log.d(TAG, "onStartCommand > isTvServerStarted:" + isTvServerStarted);        if (isTvServerStarted == false) {            Message     msg = new Message();            msg.arg1 = StartTvserverService;            mTvserverHandler.sendMessage(msg);        }        return Service.START_STICKY;    }

The Differences of onBind and onStartCommand, reference the following links.
http://www.cnblogs.com/mulisheng/p/4097968.html
http://blog.csdn.net/yuzhiboyi/article/details/7558176
3: load static lib

    private native void startTvServer();    static {        try {            System.loadLibrary("TvMiddlewareCore");            System.loadLibrary("tvserver");        } catch (UnsatisfiedLinkError e) {            Log.e(TAG, "cannot load library due to " + e.getLocalizedMessage());        }    }

and the jni implemented the startTvServer()

extern "C" {    void Java_org_droidtv_tvserver_TvServerService_startTvServer(JNIEnv *env, jobject  obj);}void Java_org_droidtv_tvserver_TvServerService_startTvServer(JNIEnv *env, jobject  obj){    LogPrint("starting TvServer");    TvServerService::instantiate();}

4: download addr
https://code.csdn.net/gonghuixue/philips_tv_apps/tree/master

0 0
原创粉丝点击