我查了一下这个问题 ,但它似乎没有回答我的问题,这是涉及的要少得多。 我打电话从菜单项在我的主要过程的IntentService。 这是目前只是其搭设在onHandleIntent敬酒()最终应该在处理结束短暂地出现说这是完成了骨架。 但是它仍然是屏幕,直到永远(即使该应用程序已停止)上。 我与模拟器和我的Galaxy S2具有相同的结果测试了。 有人能指出我朝着正确的方向吗?
这是服务的代码:
package com.enborne.spine;
import android.app.IntentService;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
public class SaveFile extends IntentService {
private final String TAG = "SaveFile";
public SaveFile() {
super("SaveFile");
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "Service Started.. ");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(TAG, "Service Destroyed.. ");
}
@Override
protected void onHandleIntent(Intent intent) {
// TODO Auto-generated method stub
Log.d(TAG, "HandleIntent");
// File saved
Toast.makeText(this, "File has been saved", Toast.LENGTH_SHORT).show();
}
}
(该的onCreate和覆盖的onDestroy仅是暂时出现在Eclipse中记录,所以我可以看到发生了什么。)
我调用它从菜单中的活性从而(与上下文搞乱只是因为服务没有启动 - 一些白痴忘了把它列入清单!):
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Intent i;
switch (item.getItemId()) {
case R.id.chart:
i = new Intent(getBaseContext(), Chart.class);
i.putExtra(KEY_CENTRE_LAT, mCentreLat); // centre coordinate
i.putExtra(KEY_CENTRE_LONG, mCentreLong); // centre coordinate
i.putExtra(KEY_RADIUS, mRadius); // effective radius
startActivity(i);
break;
case R.id.save:
Log.d("SaveFile", "Starting service...");
// i = new Intent(getBaseContext(), SaveFile.class);
i = new Intent(this, SaveFile.class);
startService(i);
break;
}
return true;
}
编辑:我发现这篇文章 ,这也许可以解释这个问题。 引用一句话:
但是,您只能在主界面线程使用面包,否则你遇到的问题,其中吐司消息没有一段时间后消失(因为是主界面背景不知道在一个单独的线程上下文中使用吐司任何消息)。