应用程序因服务而无响应

时间:2014-08-28 18:48:29

标签: android

我已经实现了这个在启动时启动的服务。但使用此服务后,我的应用程序无法运行。它显示对话框“应用程序没有响应!”一旦我删除此服务,它就可以正常工作。可能是我的错误?

公共类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());
        }


    }
}

}

2 个答案:

答案 0 :(得分:0)

ServiceUI Thread上运行。使用无限while循环实际上阻止它执行任何操作但是while循环。您可以切换为在其他IntentService

上运行的Thread

答案 1 :(得分:0)

Service上运行UI Thread

您可以选择启动IntentService,也可以为自己的服务创建后台线程。

检查:http://developer.android.com/guide/components/services.html

  

警告:服务在其托管进程的主线程中运行 -   service不会创建自己的线程,也不会单独运行   过程(除非您另行指定)。这意味着,如果你的   服务将进行任何CPU密集型工作或阻塞操作   (如MP3播放或网络),你应该创建一个新的线程   在服务范围内做这项工作。通过使用单独的线程,你   将降低应用程序无响应(ANR)错误的风险   应用程序的主线程可以保持专用于用户交互   与您的活动。