我刚刚阅读http://www.ozdroid.com/#!BLOG/2010/12/19/How_to_make_a_local_Service_and_bind_to_it_in_Android,了解绑定到本地服务时内存泄漏的方式......
我目前正在使用以下代码实现对本地服务的绑定。
在我的服务中:
private final Binder binder=new LocalBinder();
public class LocalBinder extends Binder implements IStreamCommander {
public void registerPlayer(IStreamListener callback) {
theUI=callback;
}
public void removePlayer(IStreamListener callback) {
theUI=null;
}
public void play(Station NowP) {
playURL(NowP);
}
public void stop() {
stopIt();
}
}
定义了IStreamCommander:
public interface IStreamCommander {
void registerPlayer(IStreamListener callback);
void removePlayer(IStreamListener callback);
void play(Station SongID);
void stop();
}
和IStreamListener已定义:
public interface IStreamListener {
void updateUI(String msg, int buttons);
}
然后我在活动中有这个:
this.bindService(startedSvc, svcConn, 0);
和
private ServiceConnection svcConn = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder binder) {
service = (IStreamCommander) binder;
}
public void onServiceDisconnected(ComponentName className) {
service = null;
}
};
我是在泄漏记忆,还是这样?
答案 0 :(得分:6)
如果你要坚持使用绑定模式,我会:
Binder
移至独立的公共类,而不是内部类getApplicationContext()
而不是this
onRetainNonConfigurationInstance()
来传递活动实例之间的绑定Here is a sample project证明了这一点。