Android 如何避免使用静态方法

Android 如何避免使用静态方法,android,static,static-methods,Android,Static,Static Methods,由于这个问题()已经得到了回答,我有另一种情况,我不确定使用静态方法是否有效 在名为SettingsActivity的活动中,我有一个名为FinishActivityWithResultToKey()的方法: 在完成设置活动之前,我正在另一个扩展AppWidgetProvider的类中调用这3个静态方法: public void setSharedPreferences() { db = new SharedPreferencesDatabase(PreferenceMa

由于这个问题()已经得到了回答,我有另一种情况,我不确定使用静态方法是否有效

在名为SettingsActivity的活动中,我有一个名为FinishActivityWithResultToKey()的方法:

在完成设置活动之前,我正在另一个扩展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());
            }                                       
    }
public void setSharedPreferences(){
db=新的SharedReferencesDatabase(PreferenceManager.GetDefaultSharedReferences(_context));
}
公共静态无效StartScreenReceiver(){
IntentFilter过滤器=新IntentFilter(Intent.ACTION屏幕打开);
filter.addAction(Intent.ACTION\u SCREEN\u OFF);
ScreenReceiver=新ScreenReceiver();
_context.getApplicationContext().registerReceiver(屏幕接收器,过滤器);
}
公共静态无效startClockTickAlarm(布尔代码){
AlarmManager AlarmManager=(AlarmManager)_context.getSystemService(context.ALARM_SERVICE);
持续时间长;
if(代码)
持续时间=utcMillisNextMin();
其他的
持续时间=utcMillisNextSec();
if(android.os.Build.VERSION.SDK_INT<19){
alarmManager.set(alarmManager.RTC,duration,createClockTickIntent());
}否则{
setExact(alarmManager.RTC,duration,createClockTickIntent());
}                                       
}

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

AppWidgetProvider extends BroadcastReceiver,这样您就可以简单地发送执行所需操作的意图

小部件:

FinishActivity() {
    setSharedPreferences();
    startScreenReciever();
    startClockTickAlarm(false);
}
向小部件添加OnReceive以读取意图并调用FinishActivity()。该活动将是创建和发送意图的活动。可能看起来像这样:

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

完美,通过这个简单的解决方案,我能够消除所有静态方法!很乐意帮忙。对于非widget,如果您希望通过intent调用类上的方法,您也可以编写一个广播接收器并将其存储为类的数据成员。
Intent uiIntent = new Intent(Constants.ACTION_WIDGET_FINISH_FROM_ACTIVITY);
context.sendBroadcast(uiIntent);