android 在finish()的时候不是立刻调用onDestory,怎样才能在finish后立刻回调onDestory?
2014-10-22 22:14
381 查看
============问题描述============
private MyAIDLService myAIDLService;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myAIDLService = MyAIDLService.Stub.asInterface(service);
ListView list = (ListView) findViewById(R.id.weidingdanList); //加载列表
setListShow(list); //加载列表
}
};
public void onCreate(Bundle savedInstanceState) {//重写onCreate方法
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); //不显示最上面的条
setContentView(R.layout.weidingdan);
setList();//显示一个列表
fanhui = (ImageButton) findViewById(R.id.weidingdanFanhuiButton);
fanhui.setImageResource(R.drawable.fanhui);
fanhui.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0) {
unbindService(connection);
finish();
}
});
}
private void setList(){ //列表这里的wPhoto为一个内容为“请稍后”的图片
ListView list = (ListView) findViewById(R.id.weidingdanList);
wPhoto = (ImageView) findViewById(R.id.wphoto);//显示图片
wPhoto.setImageResource(R.drawable.wphoto);//显示图片
Intent intent = new Intent("com.example.servicetest.MyAIDLService"); //调用service加载列表
bindService(intent, connection, BIND_AUTO_CREATE); //调用service加载列表
}
private void setListShow(ListView list){
ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
listItem.clear();
HashMap<String, Object> map;
map = new HashMap<String, Object>();
map.put("ItemTitle", "aaa");
map.put("ItemText", "aaa");
map.put("Time", "aaa");
map.put("Image", R.drawable.kong);
listItem.add(map);
map = new HashMap<String, Object>();
map.put("ItemTitle", "bbb");
map.put("ItemText", “bbb”);
map.put("Time", “bbb”);
map.put("Image", R.drawable.kong);
listItem.add(map);
}
}
//生成适配器的Item和动态数组对应的元素
SimpleAdapter listItemAdapter = new SimpleAdapter(this,listItem,//数据源
R.layout.list_items,//ListItem的XML实现
new String[] {"ItemTitle", "ItemText", "Time", "Image"},
new int[] {R.id.weidingdanTitle,R.id.weidingdanText,R.id.weidingdanTime,R.id.weidingdanFrontImage}
);
//添加并且显示
list.setAdapter(listItemAdapter);
closeAnim();//让图片消失
}
private void closeAnim(){
Animation animationScale;
animationScale = new ScaleAnimation(1f, 0f, 1f, 0f Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
animationScale.setDuration(5);
animationScale.setFillAfter(true);
wPhoto.startAnimation(animationScale);
}
这个程序是因为加载list较慢,所以,先显示一个“请稍后”的图片,然后加载出list后,图片消失。
上面的程序,在点击返回键后,会退回到上一个activity,到这里都是没问题的。可是,再次进入这个activity的时候,会先加载好list,然后显示“请稍后”的图片,然后图片消失。
我猜测是因为finish()后,没有执行onDestory(),才会有这样的效果。有没有大神能帮我解决一下这个问题啊??!!
或者能不能再执行finish()后立刻执行onDestory()?
帮帮忙吧!!!
============解决方案1============
那你在OnResume的时候处理下就好了啊。
============解决方案2============
finsh不是也要执行完OnResume,onstop,ondestory么
============解决方案3============
问题不在于finish destroy
你想实现的东西 完全不需要考虑这些东西 ,还是service 不是用在这个用途上。
仔细看看写别人demo参考下, 不要想当然。
============解决方案4============
引用 5 楼 sirenyizhi 的回复:
你知道这个怎么写么?我看书上说service可以执行以下耗时的程序,可是没有写怎么写。。。。。我也不会用。。。还是新手,所以求大神指导!
service也是运行在主线程,怎么可以去执行耗时操作呢,耗时操作可以自己新建线程或者用系统的AsyncTask
private MyAIDLService myAIDLService;
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName name) {
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
myAIDLService = MyAIDLService.Stub.asInterface(service);
ListView list = (ListView) findViewById(R.id.weidingdanList); //加载列表
setListShow(list); //加载列表
}
};
public void onCreate(Bundle savedInstanceState) {//重写onCreate方法
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE); //不显示最上面的条
setContentView(R.layout.weidingdan);
setList();//显示一个列表
fanhui = (ImageButton) findViewById(R.id.weidingdanFanhuiButton);
fanhui.setImageResource(R.drawable.fanhui);
fanhui.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0) {
unbindService(connection);
finish();
}
});
}
private void setList(){ //列表这里的wPhoto为一个内容为“请稍后”的图片
ListView list = (ListView) findViewById(R.id.weidingdanList);
wPhoto = (ImageView) findViewById(R.id.wphoto);//显示图片
wPhoto.setImageResource(R.drawable.wphoto);//显示图片
Intent intent = new Intent("com.example.servicetest.MyAIDLService"); //调用service加载列表
bindService(intent, connection, BIND_AUTO_CREATE); //调用service加载列表
}
private void setListShow(ListView list){
ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
listItem.clear();
HashMap<String, Object> map;
map = new HashMap<String, Object>();
map.put("ItemTitle", "aaa");
map.put("ItemText", "aaa");
map.put("Time", "aaa");
map.put("Image", R.drawable.kong);
listItem.add(map);
map = new HashMap<String, Object>();
map.put("ItemTitle", "bbb");
map.put("ItemText", “bbb”);
map.put("Time", “bbb”);
map.put("Image", R.drawable.kong);
listItem.add(map);
}
}
//生成适配器的Item和动态数组对应的元素
SimpleAdapter listItemAdapter = new SimpleAdapter(this,listItem,//数据源
R.layout.list_items,//ListItem的XML实现
new String[] {"ItemTitle", "ItemText", "Time", "Image"},
new int[] {R.id.weidingdanTitle,R.id.weidingdanText,R.id.weidingdanTime,R.id.weidingdanFrontImage}
);
//添加并且显示
list.setAdapter(listItemAdapter);
closeAnim();//让图片消失
}
private void closeAnim(){
Animation animationScale;
animationScale = new ScaleAnimation(1f, 0f, 1f, 0f Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
animationScale.setDuration(5);
animationScale.setFillAfter(true);
wPhoto.startAnimation(animationScale);
}
这个程序是因为加载list较慢,所以,先显示一个“请稍后”的图片,然后加载出list后,图片消失。
上面的程序,在点击返回键后,会退回到上一个activity,到这里都是没问题的。可是,再次进入这个activity的时候,会先加载好list,然后显示“请稍后”的图片,然后图片消失。
我猜测是因为finish()后,没有执行onDestory(),才会有这样的效果。有没有大神能帮我解决一下这个问题啊??!!
或者能不能再执行finish()后立刻执行onDestory()?
帮帮忙吧!!!
============解决方案1============
那你在OnResume的时候处理下就好了啊。
============解决方案2============
finsh不是也要执行完OnResume,onstop,ondestory么
============解决方案3============
问题不在于finish destroy
你想实现的东西 完全不需要考虑这些东西 ,还是service 不是用在这个用途上。
仔细看看写别人demo参考下, 不要想当然。
============解决方案4============
引用 5 楼 sirenyizhi 的回复:
Quote: 引用 3 楼 davidleen29 的回复:
问题不在于finish destroy
你想实现的东西 完全不需要考虑这些东西 ,还是service 不是用在这个用途上。
仔细看看写别人demo参考下, 不要想当然。
问题不在于finish destroy
你想实现的东西 完全不需要考虑这些东西 ,还是service 不是用在这个用途上。
仔细看看写别人demo参考下, 不要想当然。
你知道这个怎么写么?我看书上说service可以执行以下耗时的程序,可是没有写怎么写。。。。。我也不会用。。。还是新手,所以求大神指导!
service也是运行在主线程,怎么可以去执行耗时操作呢,耗时操作可以自己新建线程或者用系统的AsyncTask
相关文章推荐
- Android finish onDestory system.exit(0)
- 解决Android中按电源键锁屏然后旋转屏幕解锁onDestory被调用
- Android 中Native方法是怎样调用的
- Android是怎样调用硬件加速的
- android怎样调用@hide和internal API
- Android界面跳转时候onDestroy和onResume的调用顺序
- android怎样调用@hide和internal API
- java调用存储过程时,返回结果不是ResultSet的时候的处理
- Android如何获取网络连接状态(3G/Wifi)及怎样调用网络配置界面
- Android程序 类QQ通知常驻在Notification栏 点击Notification正确回调到之前已经放置在后台的Task中的对应Activity,而不是创建它的一个新实例
- Android程序 类QQ通知常驻在Notification栏 点击Notification正确回调到之前已经放置在后台的Task中的对应Activity,而不是创建它的一个新实例
- Android开发:如何按back键 彻底的关闭一个应用程序(调用finish()不太奏效)
- Android是怎样调用硬件加速的
- android 浏览器怎样才能支持各种js方法
- VC调用word时,怎样才能隐藏word的某些菜单项
- android中修改framework层代码后怎样操作才能看到修改后的效果?
- 怎样才知道对于任意的sprintf调用需要多大的目标缓冲区?怎样才能避免sprintf目标缓冲区溢出? 转载
- VC调用word时,怎样才能隐藏word的某些菜单项
- Android界面之----自定义的Dialog,然后利用回调方法,在调用处,进行Dialog中各按钮的事件处理。
- Android 中Native方法是怎样调用的