내 PreferenceActivity에서 서비스를 시작하려고합니다. 모든 onPreferenceChangeListenr에서 서비스를 시작하고 싶습니다.Android - 서비스를 다시 시작하기 전에 서비스의 이전 실행을 중지하는 방법?
나는 내 onPreferenceChangeListener에 4 가지 조건을 가지고 있으며, 각 조건은 다른 값으로 동일한 서비스를 시작해야합니다.
내가 서비스를 시작할 때 처음 환경 설정을 변경할 때 두 번째 환경 설정을 변경하면 새로운 값으로 서비스가 시작되지만 이전 조건의 실행이 중지되지 않으므로 지금 서비스가 두 가지 조건에 대한 결과를 생성하고 세 번째로 기본 설정을 변경하면 세 가지 조건에 대한 결과가 생성되기 시작하지만 필요한 것은 현재 조건에 대해서만이 서비스를 실행하는 것입니다.
public class Preferences extends PreferenceActivity
{
private Button button;
ListPreference lp;
private Context context;
private long duration;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
context = this;
lp = (ListPreference)findPreference("autoduration");
final Intent intent = new Intent(context, BackService.class);
lp.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener()
{
public boolean onPreferenceChange(Preference preference, Object newValue)
{
String newSelection = newValue.toString();
int index = lp.findIndexOfValue(newSelection);
stopService(intent);
if(index==0)
{
duration = 15000;
}
else if(index==1)
{
duration = 12000;
}
else if(index==2)
{
duration = 10000;
}
else if(index==3)
{
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver receiver = new ScreenReceiver();
registerReceiver(receiver, filter);
}
intent.putExtra("duration", duration);
startService(intent);
return true;
}
});
}
@Override
public void onDestroy()
{
super.onDestroy();
unregisterReceiver(receiver);
}
}
그리고 내 PreferenceActivity를 영향을해야 그 내 서비스 코드 : -
여기 내 PreferenceActivity's
코드입니다. -
private static Timer myTimer = new Timer();
public static final String TAG = "BackService";
private MainTask mainTask = new MainTask();
public void onStart(Intent intent, int startId)
{
Long duration = intent.getLongExtra("duration", 7000);
startServices(duration);
}
public void startServices(Long dur)
{
myTimer.scheduleAtFixedRate(mainTask,0,dur);
}
private class MainTask extends TimerTask
{
@Override
public void run() {
Log.e(TAG, "I am HERE");
}
}
내 브로드 캐스트 리시버는 다음과 같습니다 -
public class ScreenReceiver extends BroadcastReceiver {
public static boolean screenOn = true;
private static final String TAG = "ScreenReceiver";
@Override
public void onReceive(Context context, Intent intent)
{
if(intent.getAction().equals(Intent.ACTION_SCREEN_ON))
{
Log.e(TAG, "I am receiver");
}
}
}
나는 내가 잘못하고 그래서 제발 도와주세요하고 모르겠어요!
감사합니다.
. : – Varundroid
또 다른 가능성은 Timer 객체가 정적 인 결과입니다. 왜 내가 문제가 될 수 있는지 설명하기 위해 내 대답을 편집 할 것입니다. – Brigham
그래, 지금 작동 중입니다. :) 당신이 맞았습니다. mytimer 객체를 취소합니다. 이제 onDestroy()에서 myTimer.cancel()을 호출하고 있습니다. 많은 감사합니다. :) – Varundroid