public class MySettingService extends Service {
//Test Start
private int iRegisterCnt = 0;
private int iBindCnt = 0;
//Test End
final static String TAG = "MySettingService";
//ForeGround ID
private static final int FOREGROUND_ID = 1;
//Thread-related variable
private ScheduledExecutorService scheduler;
private Handler mHandler = new Handler();
//Timer settings
private static final int TIMER_VALUE = 100;
private ArrayList<String> arryVGetMesData = new ArrayList<String>();
private final RemoteCallbackList<IMySettingCallBack> callbackList
= new RemoteCallbackList<IMySettingCallBack>();
private IMySettingService.Stub MysettingserviceIF = new IMySettingService.Stub(){
@Override
public void registerCallback(IMySettingCallBack callback, String vgetdata)
throws RemoteException {
callbackList.register(callback);
setVGetMes(vgetdata);
//Test Start
iRegisterCnt++;
Log.e(TAG, "call registerCallback !!! vgetdata = " + vgetdata + " RegisterCnt = " + iRegisterCnt);
//Test End
}
@Override
public boolean unregisterCallback(IMySettingCallBack callback, int arrayno)
throws RemoteException {
Log.d(TAG, "call unregister !!!");
removeVGetMes(arrayno);
boolean bret = callbackList.unregister(callback);
return bret;
}
};
@Override
public IBinder onBind(Intent intent) {
if(IMySettingService.class.getName().equals(intent.getAction())){
//Test Start
iBindCnt++;
Log.e(TAG, "rev intent MysettingserviceIF = " + MysettingserviceIF + " iBindCnt = " + iBindCnt);
//Test End
return MysettingserviceIF;
}
return null;
}
@Override
public void onCreate() { //onCreate
super.onCreate();
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build());
mHandler = new Handler();
startForeground(FOREGROUND_ID,new Notification());
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new MySettingServiceTimer(this), 0, TIMER_VALUE, TimeUnit.MILLISECONDS);
Log.d(TAG, "onCreate");
} //onCreate
@Override
public void onDestroy() {
super.onDestroy();
stopForeground(true);
scheduler.shutdown();
}
/*****************************************************************/
/* Note.Private Method area.
/*****************************************************************/
private void setVGetMes(String mesdata){
arryVGetMesData.add(mesdata);
}
private ArrayList<String> getVGetMes(){
return arryVGetMesData;
}
private void removeVGetMes(int arrayno){
arryVGetMesData.remove(arrayno);
}
/*****************************************************************/
/* Note.Provide external method area.
/*****************************************************************/
public class MySettingServiceTimer implements Runnable{ //MySettingServiceTimer
final static String TAG = "MySettingServiceTimer";
//Class instance variables
private DataAccessInterface mdai = null;
MySettingServiceTimer(Context context){ //MySettingServiceTimer()
mdai = new DataAccessInterface(context);
} //MySettingServiceTimer()
@Override
public void run() { //run()
mHandler.post(new Runnable(){ //mHandler
@Override
public void run() { //run()
int iNum = callbackList.beginBroadcast();
//Test Start
//Log.e(TAG,"iNum = " + iNum);
//Test End
for(int i = 0; i < iNum; i++){ //for
try{
Log.e(TAG, "getVGetMes().get(i) = " + getVGetMes().get(i));
String[] strReq = mdai.readValueRequest(getVGetMes().get(i));
Log.e(TAG, "strReq[] = " + strReq[1]);
if(strReq[0].equals(DataAccessConstants.DACC_RESULT_OK)) {
Log.d(TAG, "Call onVgetDataResponse !!!");
callbackList.getBroadcastItem(i).onVgetDataResponse(strReq[1],i);
Log.e(TAG, "Return onVgetDataResponse !!! strReq[1] = " + strReq[1]);
}else{
Log.e(TAG, "Communication error!!!");
}
}catch(RemoteException e){
Log.e(TAG, "RemoteException Error!!!");
}
} //for
callbackList.finishBroadcast();
} //run()
}); //mHandler
} //run()
} //MySettingServiceTimer
}