【问题标题】:How to avoid using static methods如何避免使用静态方法
【发布时间】:2014-12-19 14:43:16
【问题描述】:

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

在一个名为 SettingsActivity 的活动中,我有一个名为 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());
            }                                       
    }

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

【问题讨论】:

    标签: android static static-methods


    【解决方案1】:

    AppWidgetProvider 扩展了 BroadcastReceiver,因此您可以简单地发送一个意图来执行您需要的操作。

    小部件:

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

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

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

    【讨论】:

    • 完美,通过这个简单的解决方案,我能够消除所有静态方法!
    • 乐于助人。对于非小部件,如果您想通过意图调用该类的方法,您也可以只编写广播接收器并将其存储为类的数据成员。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2013-10-24
    相关资源
    最近更新 更多