0

タスクを完了したサービスを停止したいです。しかし、サービスは停止しません onDestroy() をオーバーライドしますが、機能しません。サービスが停止すると、新しいアクティビティが開始されます。
以下は私のコードです

DataService.java

  package com.remote.synchronizer.haris;

import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import org.apache.http.NameValuePair;

import android.app.Service;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

public class DataService extends Service {

    boolean wifi,edge;
    private Timer timer= new Timer();
    SQLiteDatabase db;
    String un,shop,city,date,order;
    private SQLiteAdapter mySQLiteAdapter;

    @Override
    public void onCreate(){

        super.onCreate();
        mySQLiteAdapter = new SQLiteAdapter(this);
    //  this.stopSelf();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        final Handler mHandler = new Handler();

        new Thread(new Runnable(){

            @Override
            public void run() {
                Log.e("Service Started", "Successful");
                while(true){
                    try{
                        Thread.sleep(10000);
                        mHandler.post(new Runnable() {

                            @Override
                            public void run() {
                                //Checking network connectivity
                                wifi=NetworkInfo.Wifi(DataService.this);
                                edge=NetworkInfo.EDGE(DataService.this);

                                if(wifi==true||edge==true)
                                {
                                    int count=mySQLiteAdapter.getCCount();
                                    int counter=0;

                                    if(mySQLiteAdapter.getCCount()>0){

                                        while(counter<count){
                                            Log.e("Service Network", "Network is online");

                                            int id=mySQLiteAdapter.getID();

                                            List<NameValuePair> contacts=new ArrayList<NameValuePair>();

                                            contacts=mySQLiteAdapter.getSingleRecord(id);

                                            String url="http://10.0.2.2:3325/Product/Create?"; 

                                            int response = 0;
                                            try 
                                            {   
                                                response = CustomHttpClient.executeHttpPost(url, contacts);

                                                if(response==200){
                                                    mySQLiteAdapter.delete_byID(id);
                                                    Log.e("Data Sent", "Response 200");
                                                    counter++;
                                                }

                                                else{

                                                    Log.e("Service Data", "Faield to upload data" );
                                                }

                                            }
                                            catch (Exception e)
                                            {
                                                Log.e("Data Sending Error", e.toString());
                                                e.printStackTrace();
                                            }
                                        }
                                    }
                                    //
                                    Thread.currentThread().interrupt(); 
                                }
                                else
                                {
                                    Log.e("Service Network", "Network is offline");
                                }
                            }
                        });
                    }
                    catch (InterruptedException e) {
                        Log.e("Data Sending Error", e.toString());
                        e.printStackTrace();
                    }
                }
            }
        }).start();
        return START_STICKY;
    }

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onDestroy() {

        Log.v("SERVICE","Service killed");
        Toast.makeText(this, "Service Destroyed", Toast.LENGTH_SHORT).show();
        //timer.cancel();
        Intent callIntent = new Intent(Intent.ACTION_CALL); 
        callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        callIntent.setClass(this, com.remote.synchronizer.haris.Login.class);
        startActivity(callIntent);
        super.onDestroy();
    }

}

どこかで、サービスを停止しないでください Android は自動的に停止することを読んだことがあります。そのような場合は、コードを編集して、作業が終了したときに新しいアクティビティを開始する方法を教えてください。タイマーを停止する必要がありますか? 次に、onStartCommand が停止し、onDestroy? が呼び出されます。はいの場合、試してみましたが成功しなかったため、タイマーを停止するにはどうすればよいですか。

4

2 に答える 2

1
  • 完了後にサービスを停止する必要がある場合は、IntentServiceを使用する必要があります
  • onDestory() はリソースを解放するために使用され、サービスが使用されなくなったときに呼び出されます。

  • 次のようにアクティビティを開始します。

    final Handler mHandler = new Handler() {
        public void HandleMessage(Message msg) {
            if(msg.what == START_NEW_ACTIVITY) {
                Intent callIntent = new Intent(Intent.ACTION_CALL); 
                callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                callIntent.setClass(this, com.remote.synchronizer.haris.Login.class);
                startActivity(callIntent);
            }
        }
    };
    public int onStartCommand(Intent intent, int flags, int startId) {
        new Thread() {
            @Override
            public void run() {
                // do your job here
                mHandler.sendEmptyMessage(START_NEW_ACTIVITY);
           }
        }.start();
    }
    
于 2012-10-16T05:55:18.410 に答える
0

作業が終了した後にサービスを停止するには、stopSelf()またはに電話してくださいstopSelf(startId)

stopSelf()サービスの終了後にアクティビティを開始する場合は、またはを呼び出す前stopSelf(startId)に、アクティビティのインテントを作成し、フラグを設定する必要がありますmIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);。呼び出してアクティビティを開始しますstartActivity(intent)

于 2012-10-15T18:40:53.070 に答える