2013-03-25 41 views
0

我现在开始编写服务例程,并且每次重新运行我的代码时都会收到一条错误消息,而不会更改任何内容。当我重新运行程序时,为什么服务会崩溃?

这里的服务程序:

公共类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的 “关于Create'd” 看和“关于开始“和”轮询运行“,但是,我重新运行该程序以查看是否仅在LogCat中获得”On Start'd“。而是我得到这个错误:

ActivityManager:开始:意向{行动= android.intent.action.MAIN猫= [android.intent.category.LAUNCHER] CMP = com.project.keegan/.StartApp} ActivityManager :警告:活动未开始,其当前任务已提前

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

当我重新运行程序时,我得到了相同的两个错误,我的应用程序启动了,但没有启动服务。但是,有趣的是,每当我对代码进行任何修改(比如我刚刚按下空格键然后退格键)并单击Save时,然后重新运行该程序,服务就会再次运行。

这里是我把它从类:

公共类的startApp扩展活动实现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); 
} 

。 。 。 }

回答

0

你的问题与你的代码无关。 Eclipse只是足够聪明,可以检测到您没有更改任何代码,并且跳过了替换设备上的应用程序。

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

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

+0

好的,谢谢,我想我明白你的意思。我现在要在手机上进行测试:我要启动应用程序,停止服务并重新启动应用程序,并重新启动服务。 – Keegs 2013-03-25 18:43:56

+0

是的,我的工作很好,谢谢...我想这就是你所说的虚惊一场。 – Keegs 2013-03-25 18:52:16

+0

@KeeganForde有时候会引起混淆,但它不会崩溃。当您离开开始它的活动时,服务也不会停止。 ('return super.onStartCommand(intent,flags,startId);'告诉Android保持服务运行 - > [START_STICKY](http://developer.android.com/reference/android/app/Service.html#START_STICKY)直到你通过'stopService'明确地停止它)。 – zapl 2013-03-25 19:06:44

相关问题