-1
こんにちは、バックグラウンドでサービスを実行するコードです。それは正常に動作しています。しかし、操作が終了しても停止することはありません。ここに私のコードです。私は一度データがサーバーに送信され、私はsqliteとmythread.stop()のデータを削除するdeleteメソッドを呼び出しているサービスを停止することはできません。スレッドを停止しますが、停止していません。誰がスレッドを停止するかは、そのための解決策です。 onDestry
のバックグラウンドで実行中のスレッドサービスを停止するAndroidコード
public class ServiceTest extends Service {
List<NameValuePair> nameValuePairs;
String timerss=null,additional=null;
String loc=null;
int localUname = 0;
String sno;
String deviceid;
List<Contact> contacts;
private static String TAG = ServiceTest.class.getSimpleName();
private MyThread mythread;
public boolean isRunning = false;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate");
mythread = new MyThread();
}
@Override
public synchronized void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
if(!isRunning){
mythread.interrupt();
mythread.stop();
}
}
@Override
public synchronized void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d(TAG, "onStart");
if(!isRunning){
mythread.start();
isRunning = true;
}
}
public void readWebPage(){
DatabaseHandler db = new DatabaseHandler(ServiceTest.this);
contacts = db.getAllContacts();
for (Contact cn : contacts) {
String log = " USERNAME: "
+ cn.getID() + " ,loc: " +cn.getName();
localUname = cn.getID();
sno = String.valueOf(localUname);
loc = cn.getName();
timerss = cn.getPhoneNumber();
// deviceid = cn.getMacId();
// additional = cn.getAdditonal();
System.out.println("benbenarji:" + localUname + loc+timerss+deviceid+additional);
System.out.println("benbenarji1:" + localUname + loc);
}
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://ip:80808/ActIotWifiLockApp/LockWebServices/storeLogForUD");
//add your data
nameValuePairs = new ArrayList<NameValuePair>(4);
nameValuePairs.add(new BasicNameValuePair("slno", sno));
nameValuePairs.add(new BasicNameValuePair("macId", deviceid));
nameValuePairs.add(new BasicNameValuePair("logdesc", additional));
System.out.println("logdes:" + additional);
nameValuePairs.add(new BasicNameValuePair("dateTime", "timerss"));
nameValuePairs.add(new BasicNameValuePair("username", "loc"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
//Execute HTTP Post Request
ResponseHandler<String> responseHandler = new BasicResponseHandler();
final String response = httpclient.execute(httppost, responseHandler);
System.out.println("ResponseScan: " + response);
// runOnUiThread(new Runnable() {
// public void run() {
//
// dialog.dismiss();
// }
// });
if (response.contains("true")) {
db.deleteAllData();
mythread.interrupt();
mythread.stop();
} else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
} catch (Exception e) {
System.out.println("Exception : " + e.getMessage());
}
}
class MyThread extends Thread{
static final long DELAY = 10000;
@Override
public void run(){
System.out.println("ben:"+isRunning);
while(isRunning){
Log.d(TAG,"Running");
try {
readWebPage();
Thread.sleep(DELAY);
} catch (InterruptedException e) {
isRunning = false;
e.printStackTrace();
}
}
}
}
}