由于这个问题( Using static methods in Android? )已经得到解答,我还有另一种情况,我不确定使用静态方法是否有效。
在名为 SettingsActivity 的 Activity 中,我有一个名为 finishActivityWithResultOkey() 的方法:
public void finishActivityWithResultOkey() {
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
MyWidgetProvider.setSharedPreferences();
MyWidgetProvider.startScreenReciever();
MyWidgetProvider.startClockTickAlarm(false);
context.setResult(RESULT_OK, resultValue);
context.finish();
}
在完成 SettingsActivity 之前,我将在另一个扩展 AppWidgetProvider 的类中调用这 3 个静态方法:
public void setSharedPreferences() {
db = new SharedPreferencesDatabase(PreferenceManager.getDefaultSharedPreferences(_context));
}
public static void startScreenReciever() {
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
screenReciever = new ScreenReceiver();
_context.getApplicationContext().registerReceiver(screenReciever, filter);
}
public static void startClockTickAlarm(boolean code) {
AlarmManager alarmManager = (AlarmManager)_context.getSystemService(Context.ALARM_SERVICE);
long duration;
if(code)
duration = utcMillisNextMin();
else
duration = utcMillisNextSec();
if(android.os.Build.VERSION.SDK_INT < 19) {
alarmManager.set(AlarmManager.RTC, duration, createClockTickIntent());
} else {
alarmManager.setExact(AlarmManager.RTC, duration, createClockTickIntent());
}
}
我想知道这些静态方法是否真的需要,或者是否有另一种更好的方法来做到这一点而不使用静态方法
最佳答案
AppWidgetProvider 扩展了 BroadcastReceiver,因此您可以简单地发送 Intent 来执行您需要的操作。
小部件:
FinishActivity() {
setSharedPreferences();
startScreenReciever();
startClockTickAlarm(false);
}
向小部件添加 onRecieve 以读取 Intent 并调用 FinishActivity()。该 Activity 将是创建和发送 Intent 的 Activity 。可能看起来像这样:
Intent uiIntent = new Intent(Constants.ACTION_WIDGET_FINISH_FROM_ACTIVITY);
context.sendBroadcast(uiIntent);
关于android - 如何避免使用静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26536429/