Я сделал свою собственную реализацию Application.ActivityLifecycleCallbacks
. Я использую SherlockActivity
, но для обычного класса Activity может работать.
Во-первых, я создаю интерфейс, который имеет все методы для отслеживания жизненного цикла действий:
public interface ActivityLifecycleCallbacks{
public void onActivityStopped(Activity activity);
public void onActivityStarted(Activity activity);
public void onActivitySaveInstanceState(Activity activity, Bundle outState);
public void onActivityResumed(Activity activity);
public void onActivityPaused(Activity activity);
public void onActivityDestroyed(Activity activity);
public void onActivityCreated(Activity activity, Bundle savedInstanceState);
}
Во-вторых, я реализовал этот интерфейс в классе моего Приложения:
public class MyApplication extends Application implements my.package.ActivityLifecycleCallbacks{
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onActivityStopped(Activity activity) {
Log.i("Tracking Activity Stopped", activity.getLocalClassName());
}
@Override
public void onActivityStarted(Activity activity) {
Log.i("Tracking Activity Started", activity.getLocalClassName());
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
Log.i("Tracking Activity SaveInstanceState", activity.getLocalClassName());
}
@Override
public void onActivityResumed(Activity activity) {
Log.i("Tracking Activity Resumed", activity.getLocalClassName());
}
@Override
public void onActivityPaused(Activity activity) {
Log.i("Tracking Activity Paused", activity.getLocalClassName());
}
@Override
public void onActivityDestroyed(Activity activity) {
Log.i("Tracking Activity Destroyed", activity.getLocalClassName());
}
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
Log.i("Tracking Activity Created", activity.getLocalClassName());
}
}
В-третьих, я создаю класс, который расширяется от SherlockActivity:
public class MySherlockActivity extends SherlockActivity {
protected MyApplication nMyApplication;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
nMyApplication = (MyApplication) getApplication();
nMyApplication.onActivityCreated(this, savedInstanceState);
}
protected void onResume() {
// TODO Auto-generated method stub
nMyApplication.onActivityResumed(this);
super.onResume();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
nMyApplication.onActivityPaused(this);
super.onPause();
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
nMyApplication.onActivityDestroyed(this);
super.onDestroy();
}
@Override
protected void onStart() {
nMyApplication.onActivityStarted(this);
super.onStart();
}
@Override
protected void onStop() {
nMyApplication.onActivityStopped(this);
super.onStop();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
nMyApplication.onActivitySaveInstanceState(this, outState);
super.onSaveInstanceState(outState);
}
}
В-четвертых, все классы, которые расширяются от SherlockActivity, я заменил на MySherlockActivity:
public class MainActivity extends MySherlockActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Теперь в logcat вы увидите журналы, запрограммированные в реализации интерфейса, выполненной в MyApplication.
ОБНОВЛЕНИЕ
Эта реализация была протестирована с API уровня 9 (пряники), API уровня 12 (сота) и API уровня 17 (желейные бобы) и работает нормально. Might работает в более старых версиях Android.
Если вы хотите использовать файловую систему только для кэширования страниц и memcached для кэширования действий и фрагментов, все в порядке. Кэширование страниц всегда использует файловую систему. Просто помните, что кэширование страниц обходит ваше приложение Rails, поэтому вы не можете использовать его для страниц, которые содержат контент, изменяющийся от пользователя к пользователю, или для страниц, доступ к которым контролируется фильтрами.
Что касается удаления страниц в Unix, файл может быть удален, но фактически он не удаляется с диска, пока не будут закрыты все дескрипторы открытых файлов. Если сервер приложений открыл файл для обслуживания запроса, а команда find удаляет его через долю секунды, сервер приложений не получает внезапно ошибку при попытке чтения.
Вы также можете рассмотреть возможность использования найти
удалить файлы в зависимости от времени их последнего доступа,
Более простой подход может заключаться в использовании http-кеша перед вашим приложением в качестве кэша страницы, а не двух хранилищ внутри рельсов. Таким образом, вы можете использовать заголовки http для управления поведением кеша, включая TTL. Эти же ограничения будут применяться и к локальным кэшам браузера в качестве приятного бонуса.
Varnish имеет примерно такую же высокую производительность, как и получает, но потребует настройки другой движущейся части в вашей среде хостинга в качестве прокси. Это может иметь смысл в зависимости от того, что вы делаете.
Более простой подход может быть Rack :: Cache , который будет легко настроить, если вы используете версию рельсов с поддержкой стойки. .