如何避免使用静态方法

时间:2014-10-23 20:02:32

标签: android static static-methods

由于这个问题(Using static methods in Android?)已经得到解答,我还有另外一个案例,我不确定使用静态方法是否有效。

在名为SettingsActivity的Acitivty中,我有一个名为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个STATIC方法:

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

我想知道是否真的需要那些静态方法,或者是否有另一种更好的方法来实现这一点而不使用静态方法

1 个答案:

答案 0 :(得分:3)

AppWidgetProvider扩展了BroadcastReceiver,因此您只需发送意图即可执行所需的操作。

窗口小部件:

FinishActivity() {
    setSharedPreferences();
    startScreenReciever();
    startClockTickAlarm(false);
}

向窗口小部件添加onRecieve以读取intent并调用FinishActivity()。活动将是创建和发送Intent的活动。可能看起来像这样:

Intent uiIntent = new Intent(Constants.ACTION_WIDGET_FINISH_FROM_ACTIVITY);
context.sendBroadcast(uiIntent);