当前位置:  编程技术>移动开发
本页文章导读:
    ▪Xcode 四 中使用静态库        Xcode 4 中使用静态库 Xcode4中使用静态库 1. 创建一个工作区:".xcworkspace" 2. 将项目添加到工作区(新建/添加现有项目) 3. 向应用程序target添加静态库,从Workspace 4. 打开 “Build Settings” 标签.........
    ▪ 转:在随意位置获取应用程序CONTEXT        转:在任意位置获取应用程序CONTEXT Android程序中访问资源时需要提供Context,一般来说只有在各种component中(Activity, Provider等等)才能方便的使用api来获取Context, 而在某些工具类中要获取就很麻.........
    ▪ Menu跟AlertDialog对话框       Menu和AlertDialog对话框   要在一个activity中实现菜单必须重写两个方法:  1. onCreateOptionsMenu()用于创建菜单  2. onOptionsItemSelected() 用于处理点击菜单选项事件  实例代码:  package com.kevin.dial.........

[1]Xcode 四 中使用静态库
    来源: 互联网  发布时间: 2014-02-18
Xcode 4 中使用静态库

Xcode4中使用静态库
1. 创建一个工作区:".xcworkspace"
2. 将项目添加到工作区(新建/添加现有项目)
3. 向应用程序target添加静态库,从Workspace
4. 打开 “Build Settings” 标签,设置 “User Header Search Paths” 项的值为 “$(BUILT_PRODUCTS_DIR)”,并选中“Recursive”框
5. 设置“Other Linker Flags”项的值为“-ObjC”
6. 打开scheme,设置build顺序,将静态库添加进来,并放在程序前面
7. 从静态库项目中拖动公共头文件到应用程序项目,这些头文件不需要被包括在target中

创建静态库
1. 将所有需要公开的头文件在“Target Membership”中将其设置为“public”
2. 打开 “Build Settings” ,设置“Installation Directory”的值为“$(BUILT_PRODUCTS_DIR)”;并设置“Skip Install”的值为“Yes”
3. 设置“Public Headers Folder Path”的值为 “$(TARGET_NAME)”

 

参考原文:http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/


    
[2] 转:在随意位置获取应用程序CONTEXT
    来源: 互联网  发布时间: 2014-02-18
转:在任意位置获取应用程序CONTEXT

Android程序中访问资源时需要提供Context,一般来说只有在各种component中(Activity, Provider等等)才能方便的使用api来获取Context, 而在某些工具类中要获取就很麻烦了。为此,我们可以自定义一个Application类来实现这种功能。

import android.app.Application;

public class MyApplication extends Application {
    private static MyApplication instance;

    public static MyApplication getInstance() {
        return instance;
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        instance = this;
    }
}

 然后在manifest中<application>中加入name="mypackage.MyApplication"就可以在任意类中使用MyApplication.getInstance()来获取应用程序Context了。

(二)context注意事项:

在android中context可以作很多操作,但是最主要的功能是加载和访问资源。在android中有两种context,一种是 application context,一种是activity context,通常我们在各种类和方法间传递的是activity context。
比如一个activity的onCreate:

protected void onCreate(Bundle state) {
        super.onCreate(state);

        TextView label = new TextView(this); //传递context给view control
        label.setText("Leaks are bad");

        setContentView(label);
}
 把activity context传递给view,意味着view拥有一个指向activity的引用,进而引用activity占有的资源:view hierachy, resource等。

这样如果context发生内存泄露的话,就会泄露很多内存。
这里泄露的意思是gc没有办法回收activity的内存。

Leaking an entire activity是很容易的一件事。

当屏幕旋转的时候,系统会销毁当前的activity,保存状态信息,再创建一个新的。

比如我们写了一个应用程序,它需要加载一个很大的图片,我们不希望每次旋转屏 幕的时候都销毁这个图片,重新加载。实现这个要求的简单想法就是定义一个静态的Drawable,这样Activity 类创建销毁它始终保存在内存中。
实现类似:

public class myactivity extends Activity {
        private static Drawable sBackground;
        protected void onCreate(Bundle state) {
                super.onCreate(state);

                TextView label = new TextView(this);
                label.setText("Leaks are bad");

                if (sBackground == null) {
                        sBackground = getDrawable(R.drawable.large_bitmap);
                }
        label.setBackgroundDrawable(sBackground);//drawable attached to a view

        setContentView(label);
        }
}
 这段程序看起来很简单,但是却问题很大。当屏幕旋转的时候会有leak(即gc没法销毁activity)。

我 们刚才说过,屏幕旋转的时候系统会销毁当前的activity。但是当drawable和view关联后,drawable保存了view的 reference,即sBackground保存了label的引用,而label保存了activity的引用。既然drawable不能销毁,它所 引用和间接引用的都不能销毁,这样系统就没有办法销毁当前的activity,于是造成了内存泄露。gc对这种类型的内存泄露是无能为力的。

避免这种内存泄露的方法是避免activity中的任何对象的 生命周期长过activity,避免由于对象对 activity的引用导致activity不能正常被销毁。我们可以使用application context。application context伴随application的一生,与activity的生命周期无关。application context可以通过Context.getApplicationContext或者Activity.getApplication方法获取。

避免context相关的内存泄露,记住以下几点:
1. 不要让生命周期长的对象引用activity context,即保证引用activity的对象要与activity本身生命周期是一样的
2. 对于生命周期长的对象,可以使用application context
3. 避免非静态的内部类,尽量使用静态类,避免生命周期问题,注意内部类对外部对象引用导致的生命周期变化

(三)获取别的包的context

Android中有Context的概念,想必大家都知道。Context可以做很多事情,打开activity、发送广播、打开本包下文件夹和数据库、 获取classLoader、获取资源等等。如果我们得到了一个包的Context对象,那我们基本上可以做这个包自己能做的大部分事情。

         那我们能得到吗?很高兴的告诉你,能!
      Context有个createPackageContext方法,可以创建另外一个包的上下文,这个实例不同于它本身的Context实例,但是功能是一样的。


      这个方法有两个参数:
1。packageName  包名,要得到Context的包名
2。flags  标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。 CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思 是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。


      下面给个小例子,执行另外一个包里面的某个类的方法。
      另外一个包的包名是chroya.demo,类名Main,方法名print,代码如下:

package chroya.demo;  
  
import android.app.Activity;  
import android.os.Bundle;  
import android.util.Log;  
  
class Main extends Activity {  
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
    }  
      
    public void print(String msg) {  
        Log.d("Main", "msg:"+ msg);  
    }  
}  

  本包的调用Main的print方法的代码块如下:

Context c = createPackageContext("chroya.demo", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY);  
//载入这个类  
Class clazz = c.getClassLoader().loadClass("chroya.demo.Main");  
//新建一个实例  
Object owner = clazz.newInstance();  
//获取print方法,传入参数并执行  
Object obj = clazz.getMethod("print", String.class).invoke(owner, "Hello"); 
  ok,这样,我们就调用了chroya.demo包的Main类的print方法,执行结果,打印出了Hello。

      怎么样,这只是一个调用其他包的代码的例子,我们获取到Context,还可以做很多事情,当然,题目所说的坏事,还是不要做为好

 

转自:http://www.cnblogs.com/Greenwood/archive/2011/04/02/2003803.html


    
[3] Menu跟AlertDialog对话框
    来源: 互联网  发布时间: 2014-02-18
Menu和AlertDialog对话框
  要在一个activity中实现菜单必须重写两个方法:
  1. onCreateOptionsMenu()用于创建菜单
  2. onOptionsItemSelected() 用于处理点击菜单选项事件
  实例代码:
 
package com.kevin.dialog;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class Main extends Activity {
	private static final int HELPGROUP = 0;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    private void openOptionsDialog(){
    	AlertDialog.Builder builder = new AlertDialog.Builder(this);
    	// 设置标题
    	builder.setTitle(R.string.about);
    	// 设置对话框信息
    	builder.setMessage(R.string.message);
        // 添加确定按钮
    	builder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {			
    		// 点击确定单击事件处理
    		@Override
			public void onClick(DialogInterface dialog, int which) {				
				System.out.println("确定按钮被点击.");
			}
		});
    	 // 添加取消按钮
    	builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
			
			@Override
			public void onClick(DialogInterface dialog, int which) {
				System.out.println("取消按钮被点击.");
			}
		});
    	// 显示对话框
    	builder.show();
    }
    // 要实现菜单必须实现以下两个函数(onCreateOptionsMenu和onOptionsItemSelected)
	// 创建菜单
    @Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(HELPGROUP, 0, 0, R.string.about);
		menu.add(HELPGROUP, 1, 1, R.string.close);
		return super.onCreateOptionsMenu(menu);
	}
    // 选择item并相应
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {		
		switch (item.getItemId()) {
		// 关于选项
		case 0:
			openOptionsDialog();
			break;
		// 关闭选项
		case 1:
			finish();
			break;
		default:
			break;
		}
		return super.onOptionsItemSelected(item);
	}
}

    
最新技术文章:
▪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消息处理机制Looper和Handler详解 iis7站长之家
▪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