2012-03-30 7 views
0

Я пишу приложение и подходящий виджет, который нуждается в данных. Эти данные загружаются через сеть. Я планирую использовать IntentService для загрузки. Эта служба сохранит данные в виде файла. Этот файл затем используется как приложением, так и виджетами.Как делиться файлом между виджетами, сервисом и приложением?

Как я могу запретить приложению и виджету читать файл, пока служба его пишет?

И как я могу запретить службе писать в файл, пока приложение или виджет читает файл?

Спасибо!

ответ

1

рассмотреть возможность расширения Application и объявить поле для чтения и записи разрешения:

public class APP extends Application { 
    boolean motherMayI; 

    ... 
} 

Тогда всякий раз, когда вы открываете FileInputStream или FileOutputStream,

... 
if (motherMayI) { 
    APP.motherMayI = false; 
    FileInputStream input = context.openFileInput("some_file_name"); 

    //read your stuff 

    input.close() 
    APP.motherMayI = true; 
} 
... 

По существу, поле motherMayI должно быть верно для кто-то читает или пишет файл, а его единственное ложное, пока его читают или пишут.

EDIT:

public FileInputStream getFileInputStream() { 
    return context.openFileInput(file_name); 
} 

Это потребует экземпляр APP.

+0

Хорошо, это похоже на простое и хорошее решение. Но я не знаю о жизненном цикле для объекта Application. Доступно ли это, если не создано никакой активности и созданы только виджеты? –

+0

Я не знаю точного ответа на ваш вопрос, но вот что я думаю: виджет читает файл и поэтому должен открыть «FileInputStream». Это должно быть сделано на Java, поэтому объект «Приложение» доступен НА САМОМ ЛИНИИ. Если нет, просто создайте метод в 'APP', который возвращает' FileInputStream'. См. Править для пояснения. – gobernador

+0

Первое предлагаемое решение отлично работает. Спасибо! –