Androidデータベースリスナー+Demo
6007 ワード
Androidデータベースリスナー+Demo
データベースのリスニング
Android開発では、データベースのコンテンツを変更した後、ファイルを削除した後、ダウンロードが完了した後、すぐにビュー上のコンテンツを表示するなど、対応する操作を実行することがよくあります.多くの人がデータベースストレージを使用しています.データベースが変更されると、再びqueryを取得する人もいます.これはメモリを非常に消費しています.cursorの処理が不適切なため、プログラムのメモリが解放されていない可能性があります.
Android内部では、データベースの変化を監視するContentObserverのものが提供されています.
ContentObserver
ContentObserverのコンストラクション関数にはパラメータHanlderが必要です.ContentObserverの内部にはRunnableインタフェースを実装する内部クラスNotificationRunnableが使用されており、データベースの内容の変化を実現するためにHanlderを使用してpostメッセージを削除する必要があります.
ContentObserverを登録する方法:
次に、ContentObserverオブジェクトを初期化し、onChange(boolean)という方法を再ロードします.データベースが変化した後、必要なことを書くことができます.
最後に、データベースを傍受する必要がないときに、傍受操作をタイムリーに処理する必要があります.
カスタムリスナー
次のリスナーは、私がカスタマイズしたリスナーです.このリスナーを直接使用してデータベースのリスナーを呼び出すことができます.他のリスナーの使用方法と変わらないです.
たとえば、Activityでデータの内容を傍受して操作する場合に使用します.
上のListenerのアドレス:https://github.com/sadaharusong/DataBaseListener好きな友達にstarを付けて~
データベースのリスニング
Android開発では、データベースのコンテンツを変更した後、ファイルを削除した後、ダウンロードが完了した後、すぐにビュー上のコンテンツを表示するなど、対応する操作を実行することがよくあります.多くの人がデータベースストレージを使用しています.データベースが変更されると、再びqueryを取得する人もいます.これはメモリを非常に消費しています.cursorの処理が不適切なため、プログラムのメモリが解放されていない可能性があります.
Android内部では、データベースの変化を監視するContentObserverのものが提供されています.
ContentObserver
ContentObserverのコンストラクション関数にはパラメータHanlderが必要です.ContentObserverの内部にはRunnableインタフェースを実装する内部クラスNotificationRunnableが使用されており、データベースの内容の変化を実現するためにHanlderを使用してpostメッセージを削除する必要があります.
ContentObserverを登録する方法:
/**
* @param uri Uri , uri
* @param notifyForDescendants boolean ,true uri uri。
* @param observer contentObserver
*/
getContentResolver().registerContentObserver(uri, notifyForDescendents, observer);
次に、ContentObserverオブジェクトを初期化し、onChange(boolean)という方法を再ロードします.データベースが変化した後、必要なことを書くことができます.
private ContentObserver observer = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
}
};
最後に、データベースを傍受する必要がないときに、傍受操作をタイムリーに処理する必要があります.
getContentResolver().unregisterContentObserver(observer);
カスタムリスナー
次のリスナーは、私がカスタマイズしたリスナーです.このリスナーを直接使用してデータベースのリスナーを呼び出すことができます.他のリスナーの使用方法と変わらないです.
/**
* Created by sadaharusong on 2017/8/5 0005.
* Github : https://github.com/sadaharusong
* Email : [email protected]
*/
public class DataBaseListener {
private Context mContext;
private onDataBaseListener mListener;
private ContentObserver cob = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
mListener.onDataBaseChange();
}
};
/**
* @param uri The URI of the database to listen
*/
DataBaseListener(Context context, Uri uri){
this.mContext = context;
context.getContentResolver().registerContentObserver(uri,true,cob);
}
public void setOnDataBaseListener(onDataBaseListener listener){
this.mListener = listener;
}
public void removeOnDataBaseListener(){
mContext.getContentResolver().unregisterContentObserver(cob);
}
public interface onDataBaseListener{
void onDataBaseChange();
}
}
たとえば、Activityでデータの内容を傍受して操作する場合に使用します.
package sadaharusong.github.com.databaselistener;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
DataBaseListener mDataBaseListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//This Uri is a example,don't use it,use the uri you want listen
mDataBaseListener = new DataBaseListener(this,Uri.EMPTY);
mDataBaseListener.setOnDataBaseListener(new DataBaseListener.onDataBaseListener() {
@Override
public void onDataBaseChange() {
// TODO: To Do Want You Want Do
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
mDataBaseListener.removeOnDataBaseListener();
}
}
上のListenerのアドレス:https://github.com/sadaharusong/DataBaseListener好きな友達にstarを付けて~