사용자 정의 연결 클래스 (스레드 확장)를 사용하는 서비스가 하드웨어 컨트롤러에 있습니다. 사용자가 선호하는 경우이 연결을 영구적으로 유지하고자합니다. Android 기기가 인터넷 연결이 끊어 지거나 Wi-Fi 등으로 전환 될 때 처리 할 코드가 이미 있습니다.알람 관리자와 내부 브로드 캐스트 수신기가있는 안드로이드 장기 실행 서비스
연결 상태를 유지하려면 컨트롤러에서 5 분마다 통화해야합니다. 저는 현재 Connection 클래스 내에서 while()으로 실행되는 스레드를 시작하고 시스템 시간과 마지막으로 통신 한 시간을 확인하고> 4 분이 지나면 상태를 요청합니다. 어떤 이유로, 서로 다른 시간에 의사 소통이 시간 내에 발생하지 않습니다. 즉, 5 분 후에 발생한다. 내가 알 수있는 한 서비스는 죽지 않지만 컨트롤러에 대한 "Ping"은 늦습니다. 휴대 전화를 충전기 (또는 디버거)에 꽂으면 발생하지 않습니다. 또한 서비스를 포 그라운드로 이동하면 동작이 동일합니다.
수면 모드로 전환 할 때 휴대 전화의 프로세서 속도가 느려 집니까?
더 좋은 방법이 있습니까?
저는 AlarmManger라고 생각합니다.하지만 서비스 내에서 내부 클래스와 작동하도록하는 데 문제가 있습니다. API 데모를 시작하려했지만 브로드 캐스트 수신기를 등록하는 방법을 알아낼 수 없습니다. 매니페스트를 변경하지 않고 프로그래밍 방식으로 수신기를 등록하려고합니다. 가 절전 모드로 전환 할 때
public class DeviceConnectionService extends Service {
@Override
public void onCreate() {
Intent intent = new Intent(this, PingConnection.class);
intent.setAction("KEEP_CONNECTION_ALIVE");
PendingIntent sender = PendingIntent.getBroadcast(this,
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// We want the alarm to go off 30 seconds from now.
long firstTime = SystemClock.elapsedRealtime();
firstTime += 15*1000;
// Schedule the alarm!
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
firstTime, 15*1000, sender);
// register to listen to the Alarm Manager
if (mPingConnectionReceiver == null) {
mPingConnectionReceiver = new PingConnection();
getApplicationContext().registerReceiver(mPingConnectionReceiver,
new IntentFilter("KEEP_CONNECTION_ALIVE"));
}
}
// ...
public class PingConnection extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (dBug) Log.i("PingConnection", "Pinging Controller");
// do real work here
}
}
}
말썽이 = 발포하지 말라 – tunneling
@tunneling : 응답에 갱신을보십시오. – CommonsWare
그게 전부입니다. 설명 할 수 있니? – tunneling