我已经实现了这个在启动时启动的服务。但使用此服务后,我的应用程序无法运行。它显示对话框“应用程序没有响应!”一旦我删除此服务,它就可以正常工作。可能是我的错误?
公共类Service1扩展了Service {
DBHelper helper;
ArrayList<String> apps;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
Log.e("Service1", "onCreate()");
helper=new DBHelper(this);
apps=new ArrayList<String>();
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
Log.e("Service1", "onStart() "+Integer.toString(startId));
super.onStart(intent, startId);
}
@Override
public void onDestroy() {
Log.e("Service1", "onDestroy()");
super.onDestroy();
Thread.currentThread().interrupt();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
Log.e("Service1","onstartcmd()");
check();
return super.onStartCommand(intent, flags, startId);
}
public void check()
{
while(true)
{
apps=helper.daylocked();
Log.e("Service1","check()");
if(apps!=null)
{
Log.e("Service1" ,apps.toString());
}
}
}
}
答案 0 :(得分:0)
Service
在UI Thread
上运行。使用无限while循环实际上阻止它执行任何操作但是while循环。您可以切换为在其他IntentService
Thread
答案 1 :(得分:0)
Service
上运行UI Thread
。
您可以选择启动IntentService
,也可以为自己的服务创建后台线程。
检查:http://developer.android.com/guide/components/services.html
警告:服务在其托管进程的主线程中运行 - service不会创建自己的线程,也不会单独运行 过程(除非您另行指定)。这意味着,如果你的 服务将进行任何CPU密集型工作或阻塞操作 (如MP3播放或网络),你应该创建一个新的线程 在服务范围内做这项工作。通过使用单独的线程,你 将降低应用程序无响应(ANR)错误的风险 应用程序的主线程可以保持专用于用户交互 与您的活动。