android 在finish()的时候不是立刻调用onDestory,怎样才能在finish后立刻回调onDestory?

============问题描述============

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

时间: 2024-11-29 00:10:37

android 在finish()的时候不是立刻调用onDestory,怎样才能在finish后立刻回调onDestory?的相关文章

Android学习笔记(十七)——使用意图调用内置应用程序

使用意图调用内置应用程序 1.创建一个新的Android项目并命名为Intents,在main.xml文件中添加两个Button: <Button android:id="@+id/btn_webbrowser" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="onClickWebBrowser&quo

Android service的开启和绑定,以及调用service的方法

界面: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout

Linux Kernel(Android) 加密算法总结(四)-应用程序调用OpenSSL加密算法

Linux Kernel(Android) 加密算法总结(三)-应用程序调用内核加密算法接口 讲到了如何调用内核中的接口的方法. 本节主要是介绍如何Android C/C++应用程序调用Openssl的AES加密算法. crypt_ssl.c #include <stdio.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <aes.h> #include

Android中Toast如何在子线程中调用

当我们在应用的子线程中调用Toast的时候,我们会发现编译时并没有问题,但是当我们运行时就会出现如下错误 大专栏  Android中Toast如何在子线程中调用l/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="image"/> 通常我们都会认为此问题是因为在子线程中去更新UI导致的,其实不然,因为我们观察所抛出的log信息即可发现不是更新UI导致的,那么是什么原因导致的此问题呢 原文地址:https://www.cnblog

Android finish后没有执行 onDestory()

如果要保存数据或者有数据相关操作,最好在onPause函数中,因为onDestroy的函数有可能不执行. There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it, so it should not be used to do things that are intended to r

Android开发相关的Blog推荐——跟随大神的脚步才能成长为大神

本篇文章主要纪录我在学习过程中,发现的非常给力的CSDNBlog和个人Blog,这些Blog都有一个共同的特点,即内容详实,讲解透彻,也算是给后来的初学者指一条路吧!只要你下定决心跟随强者的脚步,成为人们眼中的大神,只不过是时间问题! 下面排名不分先后 CSDN 鸿洋:http://blog.csdn.net/lmj623565791 爱哥:http://blog.csdn.net/aigestudio 老罗:http://blog.csdn.net/luoshengyang 小巫:http:/

Android——C语言、JNI与低层调用

JNI java native interface c的基本数据类型 int:32位,能表示的数字是2的32次方个 最高位用来表示符号位,那么还剩下31位可以表示数值,所以能表示的数字就是2的31次方个 int的表示范围: 当最高位是0时:0~2147483647 当最高位是1是:-2147483648~-1 java的基本数据类型长度 c的基本数据类型长度 byte:1 short:2 int:4 long:8 boolean:1 char:2 float:4 double:8 short:2

Android中使用ContentProvider进行跨进程方法调用

原文同时发表在我的博客 点我进入还能看到更多 需求背景 最近接到这样一个需求,需要和别的 App 进行联动交互,比如下载器 App 和桌面 App 进行联动,桌面的 App 能直接显示下载器 App 内的下载任务进度和状态. 寻找解决方案 从需求上知道了,主要问题在如何解决跨进程的通信上边. AIDL AIDL 即 Android Interface Definition Language的缩写,是专为 Android 中跨进程通信接口的描述语言.优缺点很明显,优点是稳定,快,Android 专

Android深入源码分析理解Aidl整体调用流程(雷惊风)

2017年开始上班的第一天,老不想工作了,假期感觉还没开始就已经结束了,唉,时间就是这样,新的一年开始了,虽然很不想干正事,没办法,必须干起来,因为后边的路还很长,距离六十岁还很远.刚上班也没什么事,复习一下之前的东西,看了一下Aidl相关的知识,仔细瞅了瞅Aidl的调用流程,这里写篇文章整理一下,帮助大家的同时,自己也加深一下印象.对Aidl不太了解的童鞋可以先看一下我之前的一篇文章, 链接如下:http://blog.csdn.net/liuyonglei1314/article/detai