您的位置:首页 > 移动开发 > Android开发

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 的回复:
Quote: 引用 3 楼 davidleen29 的回复:

问题不在于finish destroy

你想实现的东西 完全不需要考虑这些东西 ,还是service 不是用在这个用途上。

仔细看看写别人demo参考下, 不要想当然。


你知道这个怎么写么?我看书上说service可以执行以下耗时的程序,可是没有写怎么写。。。。。我也不会用。。。还是新手,所以求大神指导!

service也是运行在主线程,怎么可以去执行耗时操作呢,耗时操作可以自己新建线程或者用系统的AsyncTask
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐