переменная область с внутренними классами - PullRequest
0 голосов
/ 29 сентября 2010

Я создаю экран Splash (Activity) в моем приложении для Android. У меня есть внутренний класс, который расширяет AsyncTask. Конструктор для этого внутреннего класса принимает объект Context, который отправляется внутри метода onCreate действия Splash. Также есть ссылка на постоянное поле String.

public class Splash extends Activity {
private static final String TAG = "Splash";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);

    new SplashAsyncTask(this).execute(new Void[] {});
}
private class SplashAsyncTask extends AsyncTask<Void, Void, Void> {
    private Context context;
    public SplashAsyncTask(Context context) {
        this.context = context;
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            Thread.sleep(1500);
        }
        catch(InterruptedException e) {
            if(Constants.LOGGING)
                Log.e(TAG, e.toString());
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
    }
}
}

какую область я должен использовать для переменной private static final String TAG = "Splash";? все области видимости работают нормально, но что является правильным / более эффективным? Я заметил, что eclipse автоматически создает переменную с объявлением области видимости public

Кроме того, мне действительно нужно отправлять объект Context в конструктор SplashAsyncTask? или я могу / я должен просто использовать Splash.this во всех случаях, когда мне нужна ссылка Context?

1 Ответ

1 голос
/ 30 сентября 2010

private и public указывают только на то, как вы можете получить доступ к вашей переменной, это скорее вопрос безопасности, в идеале все переменные класса должны быть приватными, и вы должны обращаться к ним с помощью метода получения и установки.

Iдумаю, что слово static здесь более важно, потому что создание переменной - большая вещь, это означает, что к переменной можно получить доступ без создания экземпляра и все разделяют эту переменную, что я имею в виду, если бы вы сделали переменную:

public static final String TAG = "Splash";

тогда вы можете получить к нему доступ, написав:

Splash.TAG

, не создавая его экземпляр, но, поскольку он закрыт, вы не можете, но он все еще является общей переменной для всех экземпляров.Вы делаете из своего класса Splash

надеюсь, что это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...