我有一个服务可以被其他活动和线程调用,一些接收者等待它的回调。我知道服务只是我的应用程序中的一个实例。我想在需要调用时运行该服务,而不是一直挂在后台。如何安全地启动/停止服务?提前致谢。
问问题
1209 次
2 回答
4
它非常符合您的需求。它会在您想要它的时候开始......并在它自动完成任务时停止。所以立即释放它的内存。另一个很大的优势是它在自己的线程中运行,因此您的主线程/UI 永远不会停止。
如果您决定这回答了您的问题,请将其标记为“已接受”。这将提高您和我的声誉分数。
于 2012-08-16T05:26:43.557 回答
2
主页.java
package com.pack.service_tost_handler;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;
public class MainPage extends Activity {
static Mhandler mhandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_page);
mhandler=new Mhandler();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Intent i = new Intent(MainPage.this, ServicePage.class);
Log.i("log", "i m create in main page");
startService(i);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main_page, menu);
return true;
}
class Mhandler extends Handler
{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==111)
{
Toast.makeText(MainPage.this, "welcome to "+ msg.obj.toString(), Toast.LENGTH_SHORT).show();
}
}
}
}
服务页面.java
package com.pack.service_tost_handler;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
public class ServicePage extends Service implements Runnable
{
String[] ary;
@Override
public void onCreate()
{
Log.i("log", "create");
super.onCreate();
ary= new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Thread t1 = new Thread(this);
t1.start();
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null; }
@Override
public void run() {
for(int i=0;i<ary.length;i++)
{
try
{
synchronized (this) {
this.wait(5000);
}
}
catch (Exception e) {
Log.i("log", "Exception");
}
Message msg= MainPage.mhandler.obtainMessage(111);
msg.obj=ary[i];
MainPage.mhandler.sendMessage(msg);
}
}
}
于 2012-08-16T05:33:32.553 回答