当我重新运行程序时,为什么服务崩溃?

时间:2013-03-25 18:07:07

标签: java android service

我现在开始编写服务例程,每次重新运行代码时都会收到错误消息,而不会改变任何内容。

这是服务例程:

公共类PollingService扩展了服务{

private static final String TAG = PollingService.class.getSimpleName();

private Polling updater;

public boolean isRunning = false;

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();
    updater = new Polling();
    Log.d(TAG, "On Create'd");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // Start the Polling updater
    if(!this.isRunning){
        updater.start();
        this.isRunning = true;
    }
    Log.d(TAG, "On Start'd");
    return super.onStartCommand(intent, flags, startId);
}

@Override
public synchronized void onDestroy() {
    super.onDestroy();
    // Stop the Polling updater
    if(this.isRunning){
        updater.interrupt();
    }
    Log.d(TAG, "On Destroy'd");
}

// Polling Thread
class Polling extends Thread {
    static final long DELAY = 3000;

    @Override
    public void run() {
        while (isRunning) {
            try {
                // Do something
                Log.d(TAG, "Polling run'ing");
                // Sleep
                Thread.sleep(DELAY);
            } catch (InterruptedException e) {
                // Interrupted
                isRunning = false;
            }
        }
    }

}

}

当我运行应用程序时,我在LogCat“On Create'd”和“On Start'd”以及“Polling run'ing”中看到,然而,我重新运行程序,看看我是否“On Start” d“仅在LogCat中。但相反,我得到了这个错误:

ActivityManager:开始:Intent {act = android.intent.action.MAIN cat = [android.intent.category.LAUNCHER] cmp = com.project.keegan / .StartApp} ActivityManager:警告:活动未启动,其当前任务已被带到前面

当我检查LogCat时,它仍然说“轮询运行”。所以我进入了模拟器:菜单 - >应用管理器 - >我停止了服务。

当我重新运行程序时,我得到了相同的两个错误,我的应用程序启动但不是服务。但这是有趣的部分,每当我对代码进行任何更改时(例如,如果我只按空格键然后退格)并单击“保存”,然后重新运行程序,服务就会再次运行。

以下是我称之为的课程:

public class StartApp extends Activity实现了View.OnClickListener {

TextView disp_hello;
Button but_go2send, but_go2request;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.start_app);
    Vars();
    startService(new Intent(this, PollingService.class));
    but_go2send.setOnClickListener(this);
    but_go2request.setOnClickListener(this);
}

。 。 。 }

1 个答案:

答案 0 :(得分:0)

您的问题与您的代码无关。 Eclipse非常智能,可以检测到您没有更改任何代码,并且它会跳过更换设备上的应用程序。

而不是重新启动应用程序(这将涉及杀死它),它只是将它带回到前面。

如果你想重新启动它,你需要存在/杀死应用程序或者像你那样做并插入一个空格。