首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用消息传递的活动和服务之间的通信?

使用消息传递的活动和服务之间的通信?

提问于 2017-12-22 10:38:55
回答 2关注 0查看 549

找不到任何有关如何在活动和服务之间发送消息的例子,花了太多的时间来解决这个问题。这是一个供他人参考的示例项目。

代码语言:txt
复制
代码语言:txt
复制
This example allows you to start or stop a service directly, and separately bind/unbind from the service. When the service is running, it increments a number at 10 Hz. If the activity is bound to the Service, it will display the current value. Data is transferred as an Integer and as a String so you can see how to do that two different ways. There are also buttons in the activity to send messages to the service (changes the increment-by value).
代码语言:txt
复制
代码语言:txt
复制
Screenshot:
代码语言:txt
复制
代码语言:txt
复制
代码语言:txt
复制
代码语言:txt
复制
AndroidManifest.xml:
代码语言:txt
复制
代码语言:txt
复制
<?xml version=""1.0"" encoding=""utf-8""?>
代码语言:txt
复制
<manifest xmlns:android=""http://schemas.android.com/apk/res/android""
代码语言:txt
复制
      package=""com.exampleservice""
代码语言:txt
复制
      android:versionCode=""1""
代码语言:txt
复制
      android:versionName=""1.0"">
代码语言:txt
复制
    <application android:icon=""@drawable/icon"" android:label=""@string/app_name"">
代码语言:txt
复制
        <activity android:name="".MainActivity""
代码语言:txt
复制
                  android:label=""@string/app_name"">
代码语言:txt
复制
            <intent-filter>
代码语言:txt
复制
                <action android:name=""android.intent.action.MAIN"" />
代码语言:txt
复制
                <category android:name=""android.intent.category.LAUNCHER"" />
代码语言:txt
复制
            </intent-filter>
代码语言:txt
复制
        </activity>
代码语言:txt
复制
    <service android:name="".MyService""></service>
代码语言:txt
复制
    </application>
代码语言:txt
复制
    <uses-sdk android:minSdkVersion=""8"" />
代码语言:txt
复制
</manifest>
代码语言:txt
复制
代码语言:txt
复制
res\values\strings.xml:
代码语言:txt
复制
代码语言:txt
复制
<?xml version=""1.0"" encoding=""utf-8""?>
代码语言:txt
复制
<resources>
代码语言:txt
复制
    <string name=""app_name"">ExampleService</string>
代码语言:txt
复制
    <string name=""service_started"">Example Service started</string>
代码语言:txt
复制
    <string name=""service_label"">Example Service Label</string>
代码语言:txt
复制
</resources>
代码语言:txt
复制
代码语言:txt
复制
res\layout\main.xml:
代码语言:txt
复制
代码语言:txt
复制
代码语言:txt
复制
代码语言:txt
复制
代码语言:txt
复制
<RelativeLayout
代码语言:txt
复制
    android:id=""@+id/RelativeLayout01""
代码语言:txt
复制
    android:layout_width=""fill_parent""
代码语言:txt
复制
    android:layout_height=""wrap_content"" >
代码语言:txt
复制
代码语言:txt
复制
    <Button
代码语言:txt
复制
        android:id=""@+id/btnStart""
代码语言:txt
复制
        android:layout_width=""wrap_content""
代码语言:txt
复制
        android:layout_height=""wrap_content""
代码语言:txt
复制
        android:text=""Start Service"" >
代码语言:txt
复制
    </Button>
代码语言:txt
复制
代码语言:txt
复制
    <Button
代码语言:txt
复制
        android:id=""@+id/btnStop""
代码语言:txt
复制
        android:layout_width=""wrap_content""
代码语言:txt
复制
        android:layout_height=""wrap_content""
代码语言:txt
复制
        android:layout_alignParentRight=""true""
代码语言:txt
复制
        android:text=""Stop Service"" >
代码语言:txt
复制
    </Button>
代码语言:txt
复制
</RelativeLayout>
代码语言:txt
复制
代码语言:txt
复制
<RelativeLayout
代码语言:txt
复制
    android:id=""@+id/RelativeLayout02""
代码语言:txt
复制
    android:layout_width=""fill_parent""
代码语言:txt
复制
    android:layout_height=""wrap_content"" >
代码语言:txt
复制
代码语言:txt
复制
    <Button
代码语言:txt
复制
        android:id=""@+id/btnBind""
代码语言:txt
复制
        android:layout_width=""wrap_content""
代码语言:txt
复制
        android:layout_height=""wrap_content""
代码语言:txt
复制
        android:text=""Bind to Service"" >
代码语言:txt
复制
    </Button>
代码语言:txt
复制
代码语言:txt
复制
    <Button
代码语言:txt
复制
        android:id=""@+id/btnUnbind""
代码语言:txt
复制
        android:layout_width=""wrap_content""
代码语言:txt
复制
        android:layout_height=""wrap_content""
代码语言:txt
复制
        android:layout_alignParentRight=""true""
代码语言:txt
复制
        android:text=""Unbind from Service"" >
代码语言:txt
复制
    </Button>
代码语言:txt
复制
</RelativeLayout>
代码语言:txt
复制
代码语言:txt
复制
<TextView
代码语言:txt
复制
    android:id=""@+id/textStatus""
代码语言:txt
复制
    android:layout_width=""fill_parent""
代码语言:txt
复制
    android:layout_height=""wrap_content""
代码语言:txt
复制
    android:text=""Status Goes Here""
代码语言:txt
复制
    android:textSize=""24sp"" />
代码语言:txt
复制
代码语言:txt
复制
<TextView
代码语言:txt
复制
    android:id=""@+id/textIntValue""
代码语言:txt
复制
    android:layout_width=""fill_parent""
代码语言:txt
复制
    android:layout_height=""wrap_content""
代码语言:txt
复制
    android:text=""Integer Value Goes Here""
代码语言:txt
复制
    android:textSize=""24sp"" />
代码语言:txt
复制
代码语言:txt
复制
<TextView
代码语言:txt
复制
    android:id=""@+id/textStrValue""
代码语言:txt
复制
    android:layout_width=""fill_parent""
代码语言:txt
复制
    android:layout_height=""wrap_content""
代码语言:txt
复制
    android:text=""String Value Goes Here""
代码语言:txt
复制
    android:textSize=""24sp"" />
代码语言:txt
复制
代码语言:txt
复制
<RelativeLayout
代码语言:txt
复制
    android:id=""@+id/RelativeLayout03""
代码语言:txt
复制
    android:layout_width=""fill_parent""
代码语言:txt
复制
    android:layout_height=""wrap_content"" >
代码语言:txt
复制
代码语言:txt
复制
    <Button
代码语言:txt
复制
        android:id=""@+id/btnUpby1""
代码语言:txt
复制
        android:layout_width=""wrap_content""
代码语言:txt
复制
        android:layout_height=""wrap_content""
代码语言:txt
复制
        android:text=""Increment by 1"" >
代码语言:txt
复制
    </Button>
代码语言:txt
复制
代码语言:txt
复制
    <Button
代码语言:txt
复制
        android:id=""@+id/btnUpby10""
代码语言:txt
复制
        android:layout_width=""wrap_content""
代码语言:txt
复制
        android:layout_height=""wrap_content""
代码语言:txt
复制
        android:layout_alignParentRight=""true""
代码语言:txt
复制
        android:text=""Increment by 10"" >
代码语言:txt
复制
    </Button>
代码语言:txt
复制
</RelativeLayout>
代码语言:txt
复制
代码语言:txt
复制
代码语言:txt
复制
代码语言:txt
复制
src\com.exampleservice\MainActivity.java:
代码语言:txt
复制
代码语言:txt
复制
package com.exampleservice;
代码语言:txt
复制
代码语言:txt
复制
import android.app.Activity;
代码语言:txt
复制
import android.content.ComponentName;
代码语言:txt
复制
import android.content.Context;
代码语言:txt
复制
import android.content.Intent;
代码语言:txt
复制
import android.content.ServiceConnection;
代码语言:txt
复制
import android.os.Bundle;
代码语言:txt
复制
import android.os.Handler;
代码语言:txt
复制
import android.os.IBinder;
代码语言:txt
复制
import android.os.Message;
代码语言:txt
复制
import android.os.Messenger;
代码语言:txt
复制
import android.os.RemoteException;
代码语言:txt
复制
import android.util.Log;
代码语言:txt
复制
import android.view.View;
代码语言:txt
复制
import android.view.View.OnClickListener;
代码语言:txt
复制
import android.widget.Button;
代码语言:txt
复制
import android.widget.TextView;
代码语言:txt
复制
代码语言:txt
复制
public class MainActivity extends Activity {
代码语言:txt
复制
    Button btnStart, btnStop, btnBind, btnUnbind, btnUpby1, btnUpby10;
代码语言:txt
复制
    TextView textStatus, textIntValue, textStrValue;
代码语言:txt
复制
    Messenger mService = null;
代码语言:txt
复制
    boolean mIsBound;
代码语言:txt
复制
    final Messenger mMessenger = new Messenger(new IncomingHandler());
代码语言:txt
复制
代码语言:txt
复制
    class IncomingHandler extends Handler {
代码语言:txt
复制
        @Override
代码语言:txt
复制
        public void handleMessage(Message msg) {
代码语言:txt
复制
            switch (msg.what) {
代码语言:txt
复制
            case MyService.MSG_SET_INT_VALUE:
代码语言:txt
复制
                textIntValue.setText(""Int Message: "" + msg.arg1);
代码语言:txt
复制
                break;
代码语言:txt
复制
            case MyService.MSG_SET_STRING_VALUE:
代码语言:txt
复制
                String str1 = msg.getData().getString(""str1"");
代码语言:txt
复制
                textStrValue.setText(""Str Message: "" + str1);
代码语言:txt
复制
                break;
代码语言:txt
复制
            default:
代码语言:txt
复制
                super.handleMessage(msg);
代码语言:txt
复制
            }
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
    private ServiceConnection mConnection = new ServiceConnection() {
代码语言:txt
复制
        public void onServiceConnected(ComponentName className, IBinder service) {
代码语言:txt
复制
            mService = new Messenger(service);
代码语言:txt
复制
            textStatus.setText(""Attached."");
代码语言:txt
复制
            try {
代码语言:txt
复制
                Message msg = Message.obtain(null, MyService.MSG_REGISTER_CLIENT);
代码语言:txt
复制
                msg.replyTo = mMessenger;
代码语言:txt
复制
                mService.send(msg);
代码语言:txt
复制
            }
代码语言:txt
复制
            catch (RemoteException e) {
代码语言:txt
复制
                // In this case the service has crashed before we could even do anything with it
代码语言:txt
复制
            }
代码语言:txt
复制
        }
代码语言:txt
复制
代码语言:txt
复制
        public void onServiceDisconnected(ComponentName className) {
代码语言:txt
复制
            // This is called when the connection with the service has been unexpectedly disconnected - process crashed.
代码语言:txt
复制
            mService = null;
代码语言:txt
复制
            textStatus.setText(""Disconnected."");
代码语言:txt
复制
        }
代码语言:txt
复制
    };
代码语言:txt
复制
代码语言:txt
复制
    @Override
代码语言:txt
复制
    public void onCreate(Bundle savedInstanceState) {
代码语言:txt
复制
        super.onCreate(savedInstanceState);
代码语言:txt
复制
        setContentView(R.layout.main);
代码语言:txt
复制
        btnStart = (Button)findViewById(R.id.btnStart);
代码语言:txt
复制
        btnStop = (Button)findViewById(R.id.btnStop);
代码语言:txt
复制
        btnBind = (Button)findViewById(R.id.btnBind);
代码语言:txt
复制
        btnUnbind = (Button)findViewById(R.id.btnUnbind);
代码语言:txt
复制
        textStatus = (TextView)findViewById(R.id.textStatus);
代码语言:txt
复制
        textIntValue = (TextView)findViewById(R.id.textIntValue);
代码语言:txt
复制
        textStrValue = (TextView)findViewById(R.id.textStrValue);
代码语言:txt
复制
        btnUpby1 = (Button)findViewById(R.id.btnUpby1);
代码语言:txt
复制
        btnUpby10 = (Button)findViewById(R.id.btnUpby10);
代码语言:txt
复制
代码语言:txt
复制
        btnStart.setOnClickListener(btnStartListener);
代码语言:txt
复制
        btnStop.setOnClickListener(btnStopListener);
代码语言:txt
复制
        btnBind.setOnClickListener(btnBindListener);
代码语言:txt
复制
        btnUnbind.setOnClickListener(btnUnbindListener);
代码语言:txt
复制
        btnUpby1.setOnClickListener(btnUpby1Listener);
代码语言:txt
复制
        btnUpby10.setOnClickListener(btnUpby10Listener);
代码语言:txt
复制
代码语言:txt
复制
        restoreMe(savedInstanceState);
代码语言:txt
复制
代码语言:txt
复制
        CheckIfServiceIsRunning();
代码语言:txt
复制
    }
代码语言:txt
复制
代码语言:txt
复制
    @Override
代码语言:txt
复制
    protected void onSaveInstanceState(Bundle outState) {
代码语言:txt
复制
        super.onSaveInstanceState(outState);
代码语言:txt
复制
        outState.putString(""textStatus"", textStatus.getText().toString());
代码语言:txt
复制
        outState.putString(""textIntValue"", textIntValue.getText().toString());
代码语言:txt
复制
        outState.putString(""textStrValue"", textStrValue.getText().toString());
代码语言:txt
复制
    }
代码语言:txt
复制
    private void restoreMe(Bundle state) {
代码语言:txt
复制
        if (state!=null) {
代码语言:txt
复制
            textStatus.setText(state.getString(""textStatus""));
代码语言:txt
复制
            textIntValue.setText(state.getString(""textIntValue""));
代码语言:txt
复制
            textStrValue.setText(state.getString(""textStrValue""));
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
    private void CheckIfServiceIsRunning() {
代码语言:txt
复制
        //If the service is running when the activity starts, we want to automatically bind to it.
代码语言:txt
复制
        if (MyService.isRunning()) {
代码语言:txt
复制
            doBindService();
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
代码语言:txt
复制
    private OnClickListener btnStartListener = new OnClickListener() {
代码语言:txt
复制
        public void onClick(View v){
代码语言:txt
复制
            startService(new Intent(MainActivity.this, MyService.class));
代码语言:txt
复制
        }
代码语言:txt
复制
    };
代码语言:txt
复制
    private OnClickListener btnStopListener = new OnClickListener() {
代码语言:txt
复制
        public void onClick(View v){
代码语言:txt
复制
            doUnbindService();
代码语言:txt
复制
            stopService(new Intent(MainActivity.this, MyService.class));
代码语言:txt
复制
        }
代码语言:txt
复制
    };
代码语言:txt
复制
    private OnClickListener btnBindListener = new OnClickListener() {
代码语言:txt
复制
        public void onClick(View v){
代码语言:txt
复制
            doBindService();
代码语言:txt
复制
        }
代码语言:txt
复制
    };
代码语言:txt
复制
    private OnClickListener btnUnbindListener = new OnClickListener() {
代码语言:txt
复制
        public void onClick(View v){
代码语言:txt
复制
            doUnbindService();
代码语言:txt
复制
        }
代码语言:txt
复制
    };
代码语言:txt
复制
    private OnClickListener btnUpby1Listener = new OnClickListener() {
代码语言:txt
复制
        public void onClick(View v){
代码语言:txt
复制
            sendMessageToService(1);
代码语言:txt
复制
        }
代码语言:txt
复制
    };
代码语言:txt
复制
    private OnClickListener btnUpby10Listener = new OnClickListener() {
代码语言:txt
复制
        public void onClick(View v){
代码语言:txt
复制
            sendMessageToService(10);
代码语言:txt
复制
        }
代码语言:txt
复制
    };
代码语言:txt
复制
    private void sendMessageToService(int intvaluetosend) {
代码语言:txt
复制
        if (mIsBound) {
代码语言:txt
复制
            if (mService != null) {
代码语言:txt
复制
                try {
代码语言:txt
复制
                    Message msg = Message.obtain(null, MyService.MSG_SET_INT_VALUE, intvaluetosend, 0);
代码语言:txt
复制
                    msg.replyTo = mMessenger;
代码语言:txt
复制
                    mService.send(msg);
代码语言:txt
复制
                }
代码语言:txt
复制
                catch (RemoteException e) {
代码语言:txt
复制
                }
代码语言:txt
复制
            }
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
代码语言:txt
复制
代码语言:txt
复制
    void doBindService() {
代码语言:txt
复制
        bindService(new Intent(this, MyService.class), mConnection, Context.BIND_AUTO_CREATE);
代码语言:txt
复制
        mIsBound = true;
代码语言:txt
复制
        textStatus.setText(""Binding."");
代码语言:txt
复制
    }
代码语言:txt
复制
    void doUnbindService() {
代码语言:txt
复制
        if (mIsBound) {
代码语言:txt
复制
            // If we have received the service, and hence registered with it, then now is the time to unregister.
代码语言:txt
复制
            if (mService != null) {
代码语言:txt
复制
                try {
代码语言:txt
复制
                    Message msg = Message.obtain(null, MyService.MSG_UNREGISTER_CLIENT);
代码语言:txt
复制
                    msg.replyTo = mMessenger;
代码语言:txt
复制
                    mService.send(msg);
代码语言:txt
复制
                }
代码语言:txt
复制
                catch (RemoteException e) {
代码语言:txt
复制
                    // There is nothing special we need to do if the service has crashed.
代码语言:txt
复制
                }
代码语言:txt
复制
            }
代码语言:txt
复制
            // Detach our existing connection.
代码语言:txt
复制
            unbindService(mConnection);
代码语言:txt
复制
            mIsBound = false;
代码语言:txt
复制
            textStatus.setText(""Unbinding."");
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
代码语言:txt
复制
    @Override
代码语言:txt
复制
    protected void onDestroy() {
代码语言:txt
复制
        super.onDestroy();
代码语言:txt
复制
        try {
代码语言:txt
复制
            doUnbindService();
代码语言:txt
复制
        }
代码语言:txt
复制
        catch (Throwable t) {
代码语言:txt
复制
            Log.e(""MainActivity"", ""Failed to unbind from the service"", t);
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
}
代码语言:txt
复制
代码语言:txt
复制
src\com.exampleservice\MyService.java:
代码语言:txt
复制
代码语言:txt
复制
package com.exampleservice;
代码语言:txt
复制
代码语言:txt
复制
import java.util.ArrayList;
代码语言:txt
复制
import java.util.Timer;
代码语言:txt
复制
import java.util.TimerTask;
代码语言:txt
复制
代码语言:txt
复制
import android.app.Notification;
代码语言:txt
复制
import android.app.NotificationManager;
代码语言:txt
复制
import android.app.PendingIntent;
代码语言:txt
复制
import android.app.Service;
代码语言:txt
复制
import android.content.Intent;
代码语言:txt
复制
import android.os.Bundle;
代码语言:txt
复制
import android.os.Handler;
代码语言:txt
复制
import android.os.IBinder;
代码语言:txt
复制
import android.os.Message;
代码语言:txt
复制
import android.os.Messenger;
代码语言:txt
复制
import android.os.RemoteException;
代码语言:txt
复制
import android.util.Log;
代码语言:txt
复制
代码语言:txt
复制
public class MyService extends Service {
代码语言:txt
复制
    private NotificationManager nm;
代码语言:txt
复制
    private Timer timer = new Timer();
代码语言:txt
复制
    private int counter = 0, incrementby = 1;
代码语言:txt
复制
    private static boolean isRunning = false;
代码语言:txt
复制
代码语言:txt
复制
    ArrayList<Messenger> mClients = new ArrayList<Messenger>(); // Keeps track of all current registered clients.
代码语言:txt
复制
    int mValue = 0; // Holds last value set by a client.
代码语言:txt
复制
    static final int MSG_REGISTER_CLIENT = 1;
代码语言:txt
复制
    static final int MSG_UNREGISTER_CLIENT = 2;
代码语言:txt
复制
    static final int MSG_SET_INT_VALUE = 3;
代码语言:txt
复制
    static final int MSG_SET_STRING_VALUE = 4;
代码语言:txt
复制
    final Messenger mMessenger = new Messenger(new IncomingHandler()); // Target we publish for clients to send messages to IncomingHandler.
代码语言:txt
复制
代码语言:txt
复制
代码语言:txt
复制
    @Override
代码语言:txt
复制
    public IBinder onBind(Intent intent) {
代码语言:txt
复制
        return mMessenger.getBinder();
代码语言:txt
复制
    }
代码语言:txt
复制
    class IncomingHandler extends Handler { // Handler of incoming messages from clients.
代码语言:txt
复制
        @Override
代码语言:txt
复制
        public void handleMessage(Message msg) {
代码语言:txt
复制
            switch (msg.what) {
代码语言:txt
复制
            case MSG_REGISTER_CLIENT:
代码语言:txt
复制
                mClients.add(msg.replyTo);
代码语言:txt
复制
                break;
代码语言:txt
复制
            case MSG_UNREGISTER_CLIENT:
代码语言:txt
复制
                mClients.remove(msg.replyTo);
代码语言:txt
复制
                break;
代码语言:txt
复制
            case MSG_SET_INT_VALUE:
代码语言:txt
复制
                incrementby = msg.arg1;
代码语言:txt
复制
                break;
代码语言:txt
复制
            default:
代码语言:txt
复制
                super.handleMessage(msg);
代码语言:txt
复制
            }
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
    private void sendMessageToUI(int intvaluetosend) {
代码语言:txt
复制
        for (int i=mClients.size()-1; i>=0; i--) {
代码语言:txt
复制
            try {
代码语言:txt
复制
                // Send data as an Intege
代码语言:txt
复制
                mClients.get(i).send(Message.obtain(null, MSG_SET_INT_VALUE, intvaluetosend, 0));
代码语言:txt
复制
代码语言:txt
复制
                //Send data as a String
代码语言:txt
复制
                Bundle b = new Bundle();
代码语言:txt
复制
                b.putString(""str1"", ""ab"" + intvaluetosend + ""cd"");
代码语言:txt
复制
                Message msg = Message.obtain(null, MSG_SET_STRING_VALUE);
代码语言:txt
复制
                msg.setData(b);
代码语言:txt
复制
                mClients.get(i).send(msg);
代码语言:txt
复制
代码语言:txt
复制
            }
代码语言:txt
复制
            catch (RemoteException e) {
代码语言:txt
复制
                // The client is dead. Remove it from the list; we are going through the list from back to front so this is safe to do inside the loop.
代码语言:txt
复制
                mClients.remove(i);
代码语言:txt
复制
            }
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
代码语言:txt
复制
    @Override
代码语言:txt
复制
    public void onCreate() {
代码语言:txt
复制
        super.onCreate();
代码语言:txt
复制
        Log.i(""MyService"", ""Service Started."");
代码语言:txt
复制
        showNotification();
代码语言:txt
复制
        timer.scheduleAtFixedRate(new TimerTask(){ public void run() {onTimerTick();}}, 0, 100L);
代码语言:txt
复制
        isRunning = true;
代码语言:txt
复制
    }
代码语言:txt
复制
    private void showNotification() {
代码语言:txt
复制
        nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
代码语言:txt
复制
        // In this sample, we'll use the same text for the ticker and the expanded notification
代码语言:txt
复制
        CharSequence text = getText(R.string.service_started);
代码语言:txt
复制
        // Set the icon, scrolling text and timestamp
代码语言:txt
复制
        Notification notification = new Notification(R.drawable.icon, text, System.currentTimeMillis());
代码语言:txt
复制
        // The PendingIntent to launch our activity if the user selects this notification
代码语言:txt
复制
        PendingIntent contentIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0);
代码语言:txt
复制
        // Set the info for the views that show in the notification panel.
代码语言:txt
复制
        notification.setLatestEventInfo(this, getText(R.string.service_label), text, contentIntent);
代码语言:txt
复制
        // Send the notification.
代码语言:txt
复制
        // We use a layout id because it is a unique number.  We use it later to cancel.
代码语言:txt
复制
        nm.notify(R.string.service_started, notification);
代码语言:txt
复制
    }
代码语言:txt
复制
    @Override
代码语言:txt
复制
    public int onStartCommand(Intent intent, int flags, int startId) {
代码语言:txt
复制
        Log.i(""MyService"", ""Received start id "" + startId + "": "" + intent);
代码语言:txt
复制
        return START_STICKY; // run until explicitly stopped.
代码语言:txt
复制
    }
代码语言:txt
复制
代码语言:txt
复制
    public static boolean isRunning()
代码语言:txt
复制
    {
代码语言:txt
复制
        return isRunning;
代码语言:txt
复制
    }
代码语言:txt
复制
代码语言:txt
复制
代码语言:txt
复制
    private void onTimerTick() {
代码语言:txt
复制
        Log.i(""TimerTick"", ""Timer doing work."" + counter);
代码语言:txt
复制
        try {
代码语言:txt
复制
            counter += incrementby;
代码语言:txt
复制
            sendMessageToUI(counter);
代码语言:txt
复制
代码语言:txt
复制
        }
代码语言:txt
复制
        catch (Throwable t) { //you should always ultimately catch all exceptions in timer tasks.
代码语言:txt
复制
            Log.e(""TimerTick"", ""Timer Tick Failed."", t);
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
代码语言:txt
复制
    @Override
代码语言:txt
复制
    public void onDestroy() {
代码语言:txt
复制
        super.onDestroy();
代码语言:txt
复制
        if (timer != null) {timer.cancel();}
代码语言:txt
复制
        counter=0;
代码语言:txt
复制
        nm.cancel(R.string.service_started); // Cancel the persistent notification.
代码语言:txt
复制
        Log.i(""MyService"", ""Service Stopped."");
代码语言:txt
复制
        isRunning = false;
代码语言:txt
复制
    }
代码语言:txt
复制
}

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档