我的应用使用自定义布局来显示所有联系人信息,包括照片。它的设计是为了处理大量的联系人(1000多个),我为联系人照片创建了一个缓存,使它们加载得更快。但是,我在手机上更新联系人照片时遇到了问题。由于我使用的是缓存照片,所以新照片在强制关闭然后重新启动之前不会显示在应用程序中。我不想使用last-access时间戳之类的东西来刷新缓存的照片,因为这样做会在每次需要刷新时显著降低应用程序的速度。
因此,理想情况下,我希望在联系人照片更改时获得通知(通过类似广播接收器的东西),然后我可以在缓存中更新该照片。这可能吗?
使用CursorLoader来自动更新您的gui。在这里你可以看到一个教程。显然还有很多其他的例子。
您可以使用contentserver。
public class ContractObserv extends Activity {
MyContentObserver observer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
observer=new MyContentObserver();
getApplicationContext().getContentResolver().registerContentObserver(ContactsContract.Contacts.CONTENT_URI, true, observer);
}
private class MyContentObserver extends ContentObserver {
public MyContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.d("Androider", "INSIDE ONcHANGE");
}
}}
令人惊讶的是,一旦你运行它,每次联系人更改,OnChange被调用,直到你注销它。