메신저 안드로이드 앱을 만들고 있는데 원격 DB에서 데이터를 다운로드하여 내 로컬 DB를 백그라운드에서 업데이트하는 서비스가 있습니다.이 스레드가 내 Android APP를 차단하는 이유는 무엇입니까?
로컬 db를 업데이트 할 때 몇 초 동안 내 응용 프로그램이 고정 된 서비스에서 간단한 핸들 스타일 bucle을 사용할 때 이유를 알지 못하기 때문에 서비스에 스레드를 넣어야합니다. (내 로컬 db dbAdapter MyApplication 클래스에있는)
OK, 그럼 서비스에 스레드를 넣어,하지만 난 왜 서비스를 시작하면 서비스의 스레드 내 APP frezzing 이유를 모르겠어요 : 에스. 그것은 u 서비스와 스레드 코드를 사용하면 백그라운드에서 실행되고 아무 것도 얼어 붙지 않는다고 맹세하지만,이 경우에는 내 애플이 얼버무 린다. ¿ 그것을 피하는 방법?
이
내 서비스 코드 :public class MyServiceLocalDB extends Service implements Runnable{
RemoteConnection con; //conexion remota
//para almacenar la config local de mi app
static SharedPreferences settings;
static SharedPreferences.Editor configEditor;
boolean serviceStopped;
private static MyDbAdapter mDb;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
serviceStopped=false;
settings = PreferenceManager.getDefaultSharedPreferences(this.getApplicationContext());
configEditor = settings.edit();
con = new RemoteConnection();
mDb = new MyDbAdapter(this);
mDb.open();
}
@Override
public void onDestroy() {
//player.stop();
serviceStopped=true;
}
@Override
public void onStart(Intent intent, int startid) {
//player.start();
this.run();
}
public void updateDB()
{
mDb.clearDB();
List<Friend> myFriends=con.RetrieveFriends(settings.getString("login",""));
List<Permission> myPermissions=con.RetrievePermissions(settings.getString("login",""));
Permission p1 = null;
for (int i=0;i<myFriends.size();i++)
{
mDb.createUser(myFriends.get(i).getEmail(),myFriends.get(i).getFullName(),myFriends.get(i).getMovilephone(),myFriends.get(i).getMovileOperatingSystem(),myFriends.get(i).getPermission());
//p1=con.RetrievePermissionWithUser("[email protected]", myFriends.get(i).getEmail());
}
for (int i=0;i<myPermissions.size();i++)
{
p1=myPermissions.get(i);
String hour1=formatHourFromTime(p1.getHour1());
String hour2=formatHourFromTime(p1.getHour2());
mDb.createPermission(p1.getFk_email1(),p1.getFk_email2(),""+p1.getValidated(),hour1,hour2,p1.getDate1Formated(),p1.getDate2Formated(),""+p1.getWeekend(),p1.getFk_type());
p1=null;
}
//MyApplication.getDatabaseAdapter().clearDB();
MyApplication.setDatabaseAdapter(mDb);
}
public String formatHourFromTime(Time time)
{
String hour1;
if (time.getHours()<10)
hour1="0"+time.getHours();
else
hour1=""+time.getHours();
if (time.getMinutes()<10)
hour1=hour1+":0"+time.getMinutes()+":00";
else
hour1=hour1+":"+time.getMinutes()+":00";
return hour1;
}
public void run() {
while (serviceStopped==false)
{
//handler.sendEmptyMessage(0);
try {
Thread.sleep(25000);// sleeps
} catch (InterruptedException e) {}
updateDB();
}
}
}
onStartCommand에서 하나의 스레드를 실행 중입니다. 여전히 내 UI가 차단되고 있습니다.이 문제를 해결할 수 있습니까? – Richa
@ 리차버 샘플 코드와 함께 새로운 질문을 게시하십시오. –