Androidデータベースリスナー+Demo


Androidデータベースリスナー+Demo
データベースのリスニング
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を付けて~