当前位置:  编程技术>移动开发
本页文章导读:
    ▪送去java File种renameTo        送去java File类renameTo 刚才帮同看问题,同说调用renameTo 文件没有被重命名,看了一下原来问题出在这里 /** * @(#) Test.java Created on 2012-6-4 * * Copyright (c) 2012 Aspire. All Rights Reserved */ package com.and..........
    ▪ (定时关机)一次性封闭多个Activity以退出应用        (定时关机)一次性关闭多个Activity以退出应用 最近开发安卓应用时,要提供一个定时关机的功能,结果使用 finish() 或者android.os.Process.killProcess(android.os.Process.myPid()) 都不行,都只能关闭调.........
    ▪ UI线程堵塞导致主界面无法刷新       UI线程阻塞导致主界面无法刷新 错误如下: 06-15 04:33:34.789: W/dalvikvm(2924): threadid=14: thread exiting with uncaught exception (group=0x40a791f8) 06-15 04:33:34.789: E/AndroidRuntime(2924): FATAL EXCEPTION: ComposeHandler 06-15 04.........

[1]送去java File种renameTo
    来源: 互联网  发布时间: 2014-02-18
送去java File类renameTo

刚才帮同看问题,同说调用renameTo 文件没有被重命名,看了一下原来问题出在这里

/**
 * @(#) Test.java Created on 2012-6-4
 *
 * Copyright (c) 2012 Aspire. All Rights Reserved
 */
package com.and.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * The class <code>Test</code>
 * 
 * @author Administrator
 * @version 1.0
 */
public class Test {

    /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException {
        // 源文件
        final File src = new File("f:\\", "a.log");
        // 目标文件
        final File dest = new File("f:\\", "b.log");
        // 如果文件有人在读取它,则不能被重命名
        final InputStream in = new FileInputStream(dest);

        final boolean con = src.renameTo(dest);
        if (con) {
            System.out.println("success");
        } else {
            System.out.println("fail");
        }
    }

}

 也就是说,源文件在被重命名之前 ,不能有人在读取它,但是java为什么不提供个异常???


    
[2] (定时关机)一次性封闭多个Activity以退出应用
    来源: 互联网  发布时间: 2014-02-18
(定时关机)一次性关闭多个Activity以退出应用

最近开发安卓应用时,要提供一个定时关机的功能,结果使用

finish()

或者android.os.Process.killProcess(android.os.Process.myPid())

都不行,都只能关闭调用的那个activity,而我如果打开了多个activity,则无法完全退出应用。

网上找了一些资料说System.exit(0)方法同以上的两个方法一样,也达不到效果。


相关资料:

http://maxuefeng.blog.51cto.com/1876326/528561

http://www.360doc.com/content/11/0610/17/128678_126052257.shtml


这些资料中另外都介绍了一种方法:

 

ActivityManager manager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
manager.restartPackage(getPackageName());
 

并声明权限:

 

<uses-permission android:name="android.permission.RESTART_PACKAGES"/> 
 

这种方法确实可以达到完全退出程序的目的,但是退得太彻底了,要慎重使用。

因为该方法会终止一切和这个程序包关联的,所有共享同一uid的process被kill,所有的activity会被removed所有创建的服务会停止,还会发一个广播 Intent.ACTION_PACKAGE_RESTARTED 导致所有注册alarms被stopped,

notifications被removed。

如果你的程序使用了Alarm,则不能使用该方法。此外,该方法只能使用在1.5-2.2(不含)版本的系统中,2.2之后的需使用ActivityManager的am.killBackgroundProcesses()方法来达到目的。


由于以上方法均不能满足我的目的,因此我自己另外想了一种解决方法:


1、声明一个Activity基类,让所有Activity继承该基类;

2、在该基类中定义一个BroadcaseReceiver,在onReceiv()方法中调用Activity的finish()方法结束Activity;

3、在该基类的onCreate()方法中注册该BroadcaseReceiver,并在onDestroy()方法中取消注册;

4、在需要退出程序的地方发送一个由以上BroadcaseReceiver处理的广播。


这样,当BroadcaseReceiver接受到该广播后,finish()方法便会把所有的Activity结束掉,从而达到退出应用的目的;与此同时,并不会影响注册的Alarms等功能。

 


    
[3] UI线程堵塞导致主界面无法刷新
    来源: 互联网  发布时间: 2014-02-18
UI线程阻塞导致主界面无法刷新

错误如下:

06-15 04:33:34.789: W/dalvikvm(2924): threadid=14: thread exiting with uncaught exception (group=0x40a791f8)
06-15 04:33:34.789: E/AndroidRuntime(2924): FATAL EXCEPTION: ComposeHandler
06-15 04:33:34.789: E/AndroidRuntime(2924): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4109)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:709)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.View.requestLayout(View.java:12710)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.View.requestLayout(View.java:12710)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.View.requestLayout(View.java:12710)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.View.requestLayout(View.java:12710)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.View.requestLayout(View.java:12710)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.View.requestLayout(View.java:12710)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.View.requestLayout(View.java:12710)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.View.requestLayout(View.java:12710)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:268)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.View.requestLayout(View.java:12710)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.View.setFlags(View.java:6728)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.view.View.setVisibility(View.java:4625)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at com.android.mms.ui.ComposeMessageActivity.updateTypingIcon(ComposeMessageActivity.java:8182)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at com.android.mms.ui.ComposeMessageActivity.access$9700(ComposeMessageActivity.java:257)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at com.android.mms.ui.ComposeMessageActivity$ComposeEventHdlr.handleMessage(ComposeMessageActivity.java:8619)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.os.Looper.loop(Looper.java:137)
06-15 04:33:34.789: E/AndroidRuntime(2924):     at android.os.HandlerThread.run(HandlerThread.java:60)
06-15 04:33:34.820: W/ActivityManager(224):   Force finishing activity com.android.mms/.ui.ComposeMessageActivity

 

 

修改方法:

将更新UI代码加入到activity的UI线程队列中

    /*<Hap5.2 Message+ kf55773 2012-06-15 begin */
    private void updateTypingIcon(final boolean aEnableTyping) {
        ComposeMessageActivity.this.runOnUiThread(new Runnable() {
            public void run() {
                if (null == mTypingIcon) {
                    /* modified by Message+ kf36922 20120207 begin */
                    mTypingIcon = (GifView) findViewById(R.id.typing);
                    /* modified by Message+ kf36922 20120207 end */
                }
                if (aEnableTyping) {
                    mTypingIcon.setVisibility(View.VISIBLE);
                } else {
                    mTypingIcon.setVisibility(View.GONE);
                }
            }
        });
    }
   /*<Hap5.2 Message+ kf55773 2012-06-15 end */

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3