当前位置: 网学 > 编程文档 > Android > 正文

android学习日记

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: myeducs.cn 发布时间: 13/03/17

【网学网提醒】:网学会员,鉴于大家对android学习日记十分关注,会员在此为大家搜集整理了“android学习日记”一文,供大家参考学习!


    android学习日记
    【2012.7.10】
     正常关闭Android应用程序:(linuxidc/Linux/2012-06/64055.htm)
    
     当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭Android应用:
     第一种方法:首先获取当前进程的id,然后杀死该进程。
     Android.os.Process.killProcess(android.os.Process.myPid())
     通过这种方式不能将应用程序完全杀死,并且他不会把当前应用应用的Activity的task任务栈清空
     第二种方法:终止当前正在运行的Java虚拟机,导致程序终止
     System.exit(0);
     不会把自己的应用程序杀死
     第三种方法:强制关闭与该包有关联的一切执行
     ActivityManagermanager=(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
     manager.restartPackage(getPackageName());
    
     只能杀死别人,不能杀死自己
     企业中做法:
     创建类app继承Application
     AndroidMainfest-->name-->app//声明该类为整个应用程序全局的实例
     创建整个应用程序全局的实例
     App.class:
     ArrayListactivities;
     其他的Activity中:
     publicvoidonCreate(BundlesavedInstanceState)
     {
     Appapp=(App)getApplication();//获取应用程序全局的实例引用
     app.activities.add(this);//把当前Activity放入集合中
     }
     publicvoidonDestory()
     {
     Appapp=(App)getApplication();//获取应用程序全局的实例引用
     app.activities.remove(this);//把当前Activity从集合中移除
     }
     安全退出:
     在菜单退出按钮的事件中定义如下代码:
     Appapp=(App)getApplication();
     Listactivities=app.activities;
     for(Activityact:activities)
     {
     act.finish();//显式结束
     }
    【2012.7.11】
     Socket通信
    1.UDP实现(DatagramSocket)
     【客户端】
     //首先创建一个DatagramSocket对象
     DatagramSocketsocket=newDatagramSocket(4567);
     //创建一个InetAddress
     InetAddressserverAddress=InetAddress.getByName("192.168.1.104");
     Stringstr="hello";//这是要传输的数据
     bytedata[]=str.getBytes();//把传输内容分解成字节
     //创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个、地址,以及端口号
     DatagramPacketpacket=newDatagramPacket(data,data.length,serverAddress,4567);
     //调用socket对象的send方法,发送数据
     socket.send(packet);
    
     【服务器端】
     //创建一个DatagramSocket对象,并指定监听的端口号
    DatagramSocketsocket=newDatagramSocket(4567);
    bytedata[]=newbyte[1024];
    //创建一个空的DatagramPac
    ket对象
    DatagramPacketpacket=newDatagramPacket(data,data.length);
    //使用receive方法接收客户端所发送的数据,
    //如果客户端没有发送数据,该进程就停滞在这里
    socket.receive(packet);
    Stringresult=newString(packet.getData(),packet.getOffset(),packet.getLength());
    
     2.TCP通信
     【客户端】
     创建一Socket对象并指明服务器端的IP及端口号
     Socketsocket=newSocket("192.168.1.0",45678);
     //向服务器发送消息
     PrintWriterout=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);
     out.println(message);
     //从服务器接收消息
     BufferedReaderis=newBufferedReader(newInputStreamReader(socket.getInputStream()));
     StringrString=is.readLine().toString();
    
     【服务器端】
     //创建一个ServerSocket对象,并让这个Socket在45678端口监听
     serverSocket=newServerSocket(45678);
     //调用ServerSocket的accept()方法,接受客户端所发送的请求,
     //如果客户端没有发送数据,那么该线程就停滞不继续
    Socketsocket=serverSocket.accept();
    //从Socket当中得到InputStream对象
    InputStreaminputStream=socket.getInputStream();
    bytebuffer[]=newbyte[1024*4];
    inttemp=0;
    //从InputStream当中读取客户端所发送的数据
    while((temp=inputStream.read(buffer))!=-1)
     {
    Stringstr=newString(buffer,0,temp);
     //接下来可以对从客户端接收到的消息做处理
    }
    
     【Socket获取客户端IP地址及端口号】
     Socket类包含一些非常有用的属性,这些属性允许确定关于正在连接的客户端的信息。其中关键信息之一
     是返回EndPoint对象的RemoteEndPoint属性。EndPoint类本身是抽象的,要想收集有用的信息,需·要把
     EndPoint强制类型转换为IPEndPoint对象。IPEndPoint类包含远程客户端的IP地址和端口号。具体用法如下:
     TcpListenertcpl=newTcpListener(port);
     Sockets=tcpl.AcceptSocket();
     label1.text=((IPEndPoint)s.RemoteEndPoint).Address.ToString();
     label2.text=((IPEndPoint)s.RemoteEndPoint).Port.ToString();
    【2012.7.12】
    1.TimerTask和Timer的应用
     TimerTasktask=newTimerTask()
     {
     @Override
     publicvoidrun()//不能直接执行(1)
     {
     //TODOAuto-generatedmethodstub
     Messagemessage=newMessage();
     message.what=1;
     handler.sendMessage(message);
     }
     };
     Timertimer=newTimer();
     timer.schedule(task,1000,1000);//延迟1秒后,每秒执行一次
     finalHandlerhandler=newHandler()
     {
     publicvoidhandleMessage(Messag
    emsg)
     {
     switch(msg.what)
     {
     case1:
     textView.setText(""+binder.getCount());//(1)
     break;
     }
     super.handleMessage(msg);
     }
     };
    2.service
    
    【2012.7.13】
    
    BroadcastReceiver使用
    
    Broadcast分为:
     普通广播(NormalBroadcast):完全异步,可以在同一时刻被所有接受者接收到,消息传递效率较高,
     但不能将处理结果传递给下一个接受者,也不能终止广播。
     有序广播(OrderedBroadcast):接受者按声明的优先级一次接收消息,优先级的声明在
     元素的android:priority属性中,数越大优先级越高,取值范围-1000~+1000.也可以用IntentFilter对象的setPriority
     ()进行设置。接受者可以终止消息的传递,一旦中止,后边的接收者将无法接收到消息。优先接收到的接受者可以通过
     setResultExtras(Bundle)方法将处理结果存入Broadcast中,然后传递给下一个接受者,下一个接受者通过代码:Bundle
     bundle=getResultExtrals(true)可以获取上一个接受者存入的数据。
     sendBroadcast()发送NormalBroadcast
     sendOrderedBroadcast()发送OrderedBroadcast
     //设置优先级权限
    
    
    
    
     //一个简单的例子
     publicclassmyReceiverextendsBroadcastReceiver
     {
     @Override
     publicvoidonReceive(Contextcontext,Intentintent){
     //TODOAuto-generatedmethodstub
     Toast.makeText(context,"firstbroadcast",Toast.LENGTH_SHORT).show();
     }
     }
     publicclassBroadcastActivityextendsActivity
     {
     /**Calledwhentheactivityisfirstcreated.*/
     Buttonbutton;
     @Override
     publicvoidonCreate(BundlesavedInstanceState)
     {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     button=(Button)findViewById(R.id.Start);
     button.setOnClickListener(newButton.OnClickListener()
     {
     @Override
     publicvoidonClick(Viewv)
     {
     //TODOAuto-generatedmethodstub
     Intentintent=newIntent(BroadcastActivity.this,
     myReceiver.class);
     sendBroadcast(intent);
     }
     });
     }
     }
    
    【2012.7.14】
    SharedPreferences
     SharedPreferences本身是一个接口无法获取SharedPreferences实例,只能通过Context提供的getSharedPreferences(Stringname,intmode)
     方法获取。mode的值:
     MODE_PRIVATE(本应用程序读写)
     MODE_WORLD_READABLE(能被其他应用程序读,但不能写)
     MODE_WORLD_WRITEBALE(能被其他应用程序读写)
     SharedPreferences本身没有读写能力,通过调用其内部接口完成。SharedPreferences调用edit()方法获取它所对应的Edit对象
    。Edit提供了一
     下方法来向SharedPreferences读写数据:clear();putXxx(Stringkey,Xxxvalue);remove(Stringkey);commit();
    
     SharedPreferencespreference=getSharedPreferences("share",MODE_PIVATE);//数据以xml格式存储,share为xml文件名
     SharedPreferences.Editoreditor=preference.edit();
     写数据:
     editor.putString("str","text");//将text存在str中
     editor.putInt("num",12345);将12345存在num中
     //存储完毕,提交所有存入的数据
     editormit();
     读数据:
     Stringstring=preference.getString("str",null);
     intn=preference.getInt("num",0);
    
     SharedPreferences将数据文件写在手机内存私有的目录/data/data/···中
    【2012.7.15】
     创建带图片的toast
     Toasttoast=Toast.makeText(this,Text,Toast.LENGTH_LONG);
     toast.setGravity(Gravity.CENTER,0,0);
     //获取Toast提示里原有的View
     Viewtoastview=toast.getView();
     //创建一个imageView
     ImageViewimage=newImageView(this);
     image.setImageResource(R.drawable.img);
     //创建一个LinearLayout容器
     LinearLayoutLay=newLinearLayout(this);
     //向LinearLayout中添加图片和原有的View
     Lay.addView(image);
     Lay.addView(toastview);
     toast.setView(Lay);
     toast.show();
    【2012.7.16】
     update(Stringtable,ContentValuesvalues,StringwhereClause,String[]whereArgs)
     Conveniencemethodforupdatingrowsinthedatabase.//方便的方法更新数据库中的行
    
     table数据库的表名
     values用来更新数据的ContentValue的对象
     whereClause用来指定更新的行,一般为“_id=?”,若为null,所有的行均被更新
     whereArgswhere语句中表达式的?占位参数列表,参数只能为String类型,当为1时,用new
     String[]{Integer.toString(1)},表示_id=1的那行改变数据
    
     SQLiteDatabasedb=getWritableDatabase();
     ContentValuescv=newContentValues();
     cv.put(IDCODE,id);
     cv.put(NAME,name);
     cv.put(SEX,sex);
     intflag=db.update(T_NAME,cv,ID+"=?",
     newString[]{Integer.toString(_id)});//更新成功返回1,否则返回0;
    
     sql语句:
     db.execSQL("update"+T_NAME
     +"sets_id=?,s_name=?,s_sex=?where_id=?",newObject[]{
     id,name,sex,Integer.toString(_id)});
    
    【2012.7.27】
     Android手机检查是否和无线连接
     方法一:此方法既可以检查手机连接也可以检查手机无线连接状态。
    
     ConnectivityManagermanager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
     NetworkInfoinfo=manager.getActiveNetworkInfo();
     if(info!=null&;&;info.isConnected()){
     returntrue;
     }else{
     returnfalse;
     }
     方法二:此方法只能检查手机连接状态,不能检查手机无线连接状态(即:如果手机没手机卡,但是无线有连接
    ,也会返回false)
    
     TelephonyManagermanager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
     intstate=manager.getDataState();
     if(state==TelephonyManager.DATA_CONNECTED){
     returntrue;
     }else{
     returnfalse;
     }
    【2012.7.30】
     不同Activity之间的转换
     ComponentNamecomp=newComponentName(this,secondActivity.class);
     Intentintent=newIntent();
     intent.setComponent(comp);
     startActivity(intent);//不需要在中配置
    
    【2012.7.31】
     publicvoidaddTo()
     {
     ContentResolvercontent=getContentResolver();
     /*取得通讯簿的Cursor*/
     contactCursor=content.query(
     ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
     PEOPLE_PROJECTION,null,null,"");
     /*将Cursor传入自实现的ContactsAdapter*/
     myContactsAdapter=newContactsAdapter(this,contactCursor);
     Cursorc=myContactsAdapter.getCursor();
     for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
     Stringnumber=c
     .getString(c
     .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
     Stringname=c
     .getString(c
     .getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
     nameDB.insert(number,name,null);
     }
     }
     publicStringCompare(Stringnum)
     {
     Stringname="";
     ContentResolvercontent=getContentResolver();
     /*取得通讯簿的Cursor*/
     contactCursor=content.query(
     ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
     PEOPLE_PROJECTION,null,null,"");
     /*将Cursor传入自实现的ContactsAdapter*/
     myContactsAdapter=newContactsAdapter(this,contactCursor);
     Cursorc=myContactsAdapter.getCursor();
     for(c.moveToFirst();!c.isAfterLast();c.moveToNext()){
     //num不以86开头的普通号码,num.subString(3)截去86,num.subString(5)飞信
     if(num.equals(c.getString(c
     .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)))
     ||(num.substring(3))
     .equals(c.getString(c
     .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)))
     ||(num.substring(5))
     .equals(c.getString(c
     .getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)))){
     name=c.getString(c
     .getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
     }
     }
     returnname;
     }
    【2012.8.3】
     应用返回时保存数据,重启时再读取
     protectedvoidonPause()
     {
     //TODOAuto-generatedmethodstub
     super.onPause();
     this.getPreferences(MODE_PRIVATE).edit()
     .putString("name",namEditText.getText().toString())mit();
     this.getPreferences(MODE_PRIVATE).edit()
     .putString("num",numEditText.getText().toString())mit();
     this.getPreferences(MODE_PRIVATE).edit()
     .p
    utString("other",otherEditText.getText().toString())
     mit();
     }
    
     @Override
     protectedvoidonResume(){
     //TODOAuto-generatedmethodstub
     super.onResume();
     namEditText.setText(this.getPreferences(MODE_PRIVATE).getString("name",
     null));
     numEditText.setText(this.getPreferences(MODE_PRIVATE).getString("num",
     null));
     otherEditText.setText(this.getPreferences(MODE_PRIVATE).getString(
     "other",null));
     }
    【2012.8.4】
     自定义Dialog
    
          android:layout_height="wrap_content"android:layout_width="wrap_content"
     android:background="#ffffffff"android:orientation="horizontal"
     android:id="@+id/dialog">
          android:layout_width="wrap_content"
     android:id="@+id/tvname"android:text=":"/>
          android:layout_width="wrap_content"android:id="@+id/etname"android:minWidth="100dip"/>
    
     2.调用代码
     LayoutInflaterinflater=getLayoutInflater();
     Viewlayout=inflater.inflate(R.layout.dialog,
     (ViewGroup)findViewById(R.id.dialog));
     newAlertDialog.Builder(this).setTitle("自定义布局").setView(layout)
     .setPositiveButton("确定",null)
     .setNegativeButton("取消",null).show();
     RadioDialog
    
     publicAlertDialog.BuildersetSingleChoiceItems(CharSequence[]items,intcheckedItem,DialogInterface.OnClickListenerlistener)
    
     items列表项目
     checkedItem所选中项目的id,-1表示没有选择
     listener对列表和button监听
    
     finalCharSequence[]items={"北京","上海","天津"};
     newAlertDialog.Builder()
     .setTitle("PickaCity")
     ..setSingleChoiceItems(items,-1,
     newDialogInterface.OnClickListener(){
     publicvoidonClick(DialogInterfacedialog,intposition){
     Toast.makeText(getApplicationContext(),
     position+"->"+items[position],
     Toast.LENGTH_SHORT).show();
     dialog.dismiss();
     }
     });
    
    
    【2012.08.5】
     Debug技术
     断点->debugas
     F5。F6。F7
     F6执行下一步
     runtoline执行到光标所在的地方
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  • 上一篇资讯: Android学习笔记(2)
  • 下一篇资讯: Android学习指南
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号