엄밀히 말하면 이 오류는 gradle 오류다.
A, B라는 저장소에서 소스를 가져다 쓴다고 하자.
만약 A와 B 모두가 C를 라이브러리로 사용하고 있다면 C는 중복될 것이고 위 exception이 발생하게 된다. 

해결책은 A, B 둘 중 하나에서 C를 사용하지 않도록 exclude하는 것이다.
compile ('com.zopim.android:sdk:1.0.0') {
    exclude (module: 'jackson-annotations')
    exclude (module: 'jackson-core')
    exclude (module: 'jackson-databind')
}
이렇게 하면 해결된다.


1. mysqldump 권한 주기
mysqldump를 위해서는 LOCK TABLE 권한이 필요합니다.
GRANT SELECT, LOCK TABLE ON *.* TO ‘user’@‘%’ IDENTIFIED BY ‘password’;

2. shell 파일 만들기
vi /bin/yourBackupShellFileName.sh

내용은 다음과 같습니다
#!/bin/sh
# yourBackupShellFileName.sh
Mdate="$(date +"%Y-%m-%d”)"
mysql -uroot -ppassword database > /home/backup/${Mdate}.sql

shell 파일에 실행 권한을 추가합니다.
chmod +x /bin/yourBackupShellFileName.sh

3. crontab 추가
vi /etc/crontab

매일 23시 59분에 실행되도록 합니다
59 23 * * * root /bin/auto_backup.sh

참조


'Tech > Linux' 카테고리의 다른 글

내가 자주 쓰는 vim 설정  (0) 2016.05.10
MAC에서 zsh, agnoster theme 설치하기  (0) 2016.05.07
iptables log 남기기(CentOS 6.6)  (0) 2015.08.14

앱이 빠르기 위해서는 DB 처리와 네트워크 처리를 main thread가 아닌 다른 thread에서 처리해야 합니다. 더불어 사용자에게 필요한 정보를 앱이 켜져 있지 않을 때 가져오면 더 좋습니다. 사용자가 앱을 킬 때 이미 로컬에 저장되어 있는 데이터를 가져오면 되니까요. 전자는 AsyncTastLoader로 후자는 SyncAdapter로 해결할 수 있습니다. 


AsyncTaskLoader는 무엇이죠?

비동기 처리를 위한 클래스로 API Level 11에 도입되었습니다. SupportPackage에 포함되어 있기 때문에 어떤 Version에서든 이용이 가능합니다. 다음과 같은 특징을 가졌습니다. (안드로이드 디벨로퍼 문서 참조)

1. 모든 Activity와 Fragment에서 사용할 수 있습니다. 장점입니다.
2. 비동기적으로 데이터를 로딩할 수 있습니다.
3. 데이터를 모니터하고 내용이 변경되면 새로운 결과를 전달합니다.
4. 설정 변경 후, 다시 만들어질 때 마지막 로더의 커서에 접속합니다. 그 데이터를 re-query할 필요가 없습니다


AsyncTask랑은 무엇이 다르죠?

쓰기 쉽습니다. 더 구조적으로 깔끔합니다. 


AsyncTaskLoader를 쓰면 구체적으로 뭐가 좋지요?

main thread가 아닌 thread로 데이터를 비동기적으로 로딩할 수 있습니다. DB 긁어오는 모듈이 Activity에서 분리되어 더 깔끔한 구조를 가진 앱을 만들 수 있습니다.


어떤 방식으로 실행되나요?

Activity 혹은 Fragment에서 Loader를 implement합니다. 그리고 Loader Class를 따로 만들어주면 됩니다. 메소드들은 다음과 같은 순서로 실행됩니다.

Fragment﹕ +++ Calling initLoader()! +++
Fragment﹕ +++ Initializing the new Loader... +++
Fragment﹕ +++ onCreateLoader() called! +++
Loader﹕ +++ onStartLoading() called! +++
Loader﹕ +++ The current data is data is null... so force load! +++
Loader﹕ +++ forceLoad() called! +++
Loader﹕ +++ loadInBackground() called! +++
Loader﹕ +++ Delivering results to the LoaderManager for the ListFragment to display! +++
Fragment﹕ +++ onLoadFinished() called! +++
ListLoader﹕ +++ onStopLoading() called! +++


참조 

http://dev.classmethod.jp/smartphone/asynctaskloader/

+ Recent posts