欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android知识总结(二) 博客分类: Android Android

程序员文章站 2024-03-16 11:28:46
...

明天要考试了,速速总结如下

 

1、Activity的启动模式

       standard:每次调用Activity的时候都创建一个(可以有多个相同的实例,也允许多个相同Activity叠加。)

       singleTop:可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
       singleTask:如果某个Activity是singleTask模式,那么Task栈中将会只有一个该Activity的实例。例如:现在栈的情况为:A B C D。B的Launch mode为singleTask,此时D通过Intent跳转到B,则栈的情况变成了:A B。而C和D被弹出销毁了,也就是说位于B之上的实例都被销毁了
       singleInstance:将Activity压入一个新建的任务栈中。例如:Task栈1的情况为:A B C。C通过Intent跳转到D,而D的Launch mode为singleInstance,则将会新建一个Task栈2。此时Task栈1的情况还是为:A B C。Task栈2的情况为:D。此时屏幕界面显示D的内容,如果这时D又通过Intent跳转到D,则Task栈2中也不会新建一个D的实例,所以两个栈的情况也不会变化。而如果D跳转到C,则栈1的情况变成了:A B C C,因为C的Launch mode为standard,此时如果再按返回键,则栈1变成:A B C。也就是说现在界面还显示C的内容,不是D。

 

2、Activity的五大布局

  FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)

3、Toast

     toast.makeText(this,"提示信息",o).show();

4、TextView

            textView---->HTML.fromHTML();可通过HTML代码显示文本格式。

5、适配器

           ArrayAdapter、SimpleAdapter

6、从resources中获取的图片只能设置不能修改

7、Canvas、Point、Bitmap、Watrix(矩阵类,对图片做变换)、BitmapDrawable

8、ImageSwitch实现ViewFactory接口

 

6、什么是ANR?

    Application not response

    发生anr的情况如下:

     A、主线程 (“事件处理线程” / “UI线程”) 在5秒内没有响应输入事件

           a、在主线程内进行网络操作

           b、在主线程内进行慢的io操作

     B、BroadcastReceiver 没有在10秒内完成返回

     怎么解决anr?

第一种解决的方法如下:(子线程可以解决anr但是不能更新UI)

      A、new出一个新的线程进行耗时操作,数据请求

      B、耗时操作或者数据请求完成时,使用handler.sendMessage方法

      C、handler的handle()方法中更新UI

      下面是这样的一个例子:

        

public class MainActivity extends Activity implements OnClickListener
{

	private Button bget;
	private ImageView imageView;
	Handler handler = new Handler()
	{
		public void handleMessage(Message msg)
		{
			Bitmap bmp = (Bitmap) msg.obj;
			imageView.setImageBitmap(bmp);
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		bget = (Button) findViewById(R.id.bget);
		imageView = (ImageView) findViewById(R.id.imageview);
		bget.setOnClickListener(this);
	}

	

	@Override
	public void onClick(View v)
	{
		// TODO Auto-generated method stub
		new Thread()
		{
			public void run()
			{
			try
			{
				URL url = new URL("http://10.0.2.2:9999/testdemo/images/pre4.jpg");
				HttpURLConnection conn = (HttpURLConnection) url.openConnection();
				conn.setDoInput(true);
				conn.setDoOutput(false);
				conn.setConnectTimeout(5000);
				conn.setRequestMethod("GET");
				if(conn.getResponseCode() ==200)
				{
					InputStream inputStream = conn.getInputStream();
					Bitmap bmp = BitmapFactory.decodeStream(inputStream);
					Message message = new Message();
					message.obj = bmp;
					handler.sendMessage(message);
				}
				
			} catch (Exception e)
			{
				// TODO: handle exception
			}	
				
				
				
			}
		}.start();
		
	}

}

 

第二种可以使用异步处理类AsyncTask

在安卓中经常用到要和网络进行交互的,下面是和网络交互的一个例子

public class MainActivity extends Activity implements OnClickListener
{

	private Button bget;
	private ImageView imageView;
	
	Handler handler = new Handler()
	{
		public void handleMessage(Message msg)
		{
			Bitmap bmp = (Bitmap) msg.obj;
			imageView.setImageBitmap(bmp);
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		bget = (Button) findViewById(R.id.bget);
		imageView = (ImageView) findViewById(R.id.imageview);
		bget.setOnClickListener(this);
	}

	

	@Override
	public void onClick(View v)
	{
		// TODO Auto-generated method stub
		MyAsyncTask myAsyncTask = new MyAsyncTask();
		myAsyncTask.execute("http://10.0.2.2:9999/testdemo/images/pre4.jpg");
		//"http://10.0.2.2:9999/testdemo/images/pre4.jpg"
	}
	
	// 第一个参数就是一个字符串,就是网络上的url地址
	// 第二个参数是 Integer,标明进度...
	// 第三个参数指的是返回的值
	class MyAsyncTask extends AsyncTask<String, Integer, Bitmap>
	{

		
		// 任务执行前调用的方法,它是在主线程中
		@Override
		protected void onPreExecute()
		{
			// TODO Auto-generated method stub
			super.onPreExecute();
		}

		
		@Override
		protected void onProgressUpdate(Integer... values)
		{
			// TODO Auto-generated method stub
			super.onProgressUpdate(values);
		}


		// 后台执行的任务,它是在子线程中...这个的方法的返回参数,会
		// 做为onPostExecute()中的传递参数.
		@Override
		protected Bitmap doInBackground(String... params)
		{
			// TODO Auto-generated method stub
			String urlstr = params[0];
			try
			{
				URL url = new URL(urlstr);
				HttpURLConnection conn = (HttpURLConnection) url.openConnection();
				conn.setDoInput(true);
				conn.setDoOutput(false);
				conn.setConnectTimeout(5000);
				conn.setRequestMethod("GET");
				if(conn.getResponseCode() ==200)
				{
					InputStream inputStream = conn.getInputStream();
					Bitmap bmp = BitmapFactory.decodeStream(inputStream);
					
                    return bmp;
                    
                    
				}
			} catch (Exception e)
			{
				// TODO: handle exception
			}
			return null;
		}

		
		//任务执行完毕,调用的方法.它也是在主线程中.
		@Override
		protected void onPostExecute(Bitmap result)
		{
			// TODO Auto-generated method stub
		//	super.onPostExecute(result);
			imageView.setImageBitmap(result);
		}
		
		
		
	}

}

 

 

 

 

相关标签: Android