android - 如何避免使用静态方法

标签 android static static-methods

由于这个问题( 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/

相关文章:

android - 在自定义图 block 上使用 Google map KML 导入实用程序

android - 如何在 Android webview 中制作一个正方形大小的 HTML 表格填充屏幕

opencv - 用我自己的库打包opencv库

java - 子类中具有不同值的静态参数

javascript - 在javascript中使用子类中的静态方法

c# - 我应该在 c# 中使用静态函数吗?

android - Jetpack Compose 中的主页和身份验证导航流程

android - java.lang.UnsupportedOperationException android 数组列表

Python 静态 setter 和 getter?

c++ - 使用静态方法初始化 const 类字段是好事还是坏事?