一直以来都想写自己的博客,这真的停留在想什么,几乎没有去实施,一直都想把自己的学到的技术和大家分享一下,可以一直都没有一颗坚持的心。对于我这个不是科班出生的程序员,在学习的过程中遇到了很多困难,但是困难过后自己的收获就很多。
今天就和大家聊聊我自己的故事,和很多人一样在高中的时候对大学充满了理想化的生活,可是真的踏入大学有不像自己想象的那样,大一上半学期模模糊就过来了,什么东西也没学到。心里就在思考按这样的生活继续下去,整个大学就荒废了,于是心里开始琢磨着学点什么?也就是这样的琢磨,开始了我苦逼的编程之旅,我接触的第一种语言是c语言,那时候c语言只学了基础,听别人说java很火,于是就开始了学java之旅,刚开始学习编程不知道怎么学,也没有老师带着。开始是从来不敲代码的那种,只是每天拿着书本看,感觉似乎看懂了,然后就继续往下看,就这样一本java从门到精通被我用一个月的时间看完了,这期间一行代码也没敲,看完之后回忆总结一下自己学到的东西,竟然不能用一个字一段话来形容自己学的什么。
这样的情况下,也就是自己什么也没学到,什么也没理解,于是开始上网关注各种博客,然后看看前辈的经验总结,自己也开始逐渐敲代码,一边看是一边敲代码,领悟java的思想,就这样每天的学习,也正因为是这样,室友和同学都把我看成外星人,因为他们都在玩各种游戏,我却在苦逼的敲代码,于是乎慢慢的就和他们有了隔阂,他们说话也有点冷嘲热讽(可能是他们也没那种意思,当时我想多了吧),我感觉不适合在宿舍学编程了,就开始转移地方。来到了实验室,这才真正的开始了我的编程之旅。那时候我几乎都是每天早上6点多就起床,就这样苦逼的生活一直延续到大四。
还是谈谈我学习心得吧,自学了那么久,也总结了很多自己的方法,我学java学历很久,然后又开始学android,之后又学习ios开发,到目前是android和ios工作。1.我感觉学习编程语言最好的方法就是多做练习,一段代码最好是敲个几遍,再敲代码的过程中一定要思考。编程语言是一通百通的,只要理解透了一种语言,学习其他语言就是记忆一些区别性的东西。2.在学习一些基础性的东西之后一定要做项目练习,无论是多么小的项目一定要做,这样不经复习了知识,而且还把知识融会贯通了,这一点非常重要。3.学习的时候,一定要谦虚,会就是会,不会就是不会,一定不要骗自己和想当然。4.学习编程一定要先学思想,思想很重要,思想是陪伴自己以后的编程路的,时刻都离不开它,她就是我们的指导思想。
就写到这里吧,
我以后一定会坚持更新自己的技术博客,把自己做项目的经验分享给大家。
谢谢大家!!!!!
一:LOG 的用法:
package com.example.example; import android.os.Bundle; import android.app.Activity; import android.util.Log; public class MainActivity extends Activity { private static final String TAG="hello log"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG, "my first log"); System.out.print("print"); } }
运行,看到logcat中一堆信息。
设置过滤器:
在logcat中点击蓝色加号(create filter):
输处打印语句的打印内容:
运行后查看输出结果:
二:debug调试:
输出日志调试方法,是程序繁琐而且效率低,所以较多的运用debug方法为好
package com.example.example; import android.os.Bundle; import android.app.Activity; import android.util.Log; public class MainActivity extends Activity { private static final String TAG="hellolog"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG, "my first log"); System.out.println("print"); int i=1+2; int d=myFirstDebug(i); } public int myFirstDebug(int x){ int a=x; int b=40; int c=a+b; return c; } }
点击 int i= 1+2 左边双击添加一个端点,右击项目选择调试方式debug as->Android Application.这是模拟器弹出一个对话框,确认切换到debug视图。
当然在run 菜单栏中有更多debug的选项。
三:单元测试:
JUnit是采用测试驱动开发的方式,在开发前先写好测试代码,主要用来说明被测试的代码会被如何使用,错误处理等,然后开始写代码,并在测试代码中逐步测试这些代码,知道最后在测试代码中完全通过,这样就不用一遍遍在缓慢的模拟器上来运行我们的程序,提高了开发效率。
在androidmanifest中配置:<uses-library android:name="android.text.runner"/>
在manifest的根标签下添加如下两行代码:
<instrumentation android:name="android.text.InstrumentationTextRunner" android:targetPackage="com.example.exam" android:label="Test for my app"> </instrumentation>
建一个测试类,这个类必须继承AndroidTestCase
JUnit将为我们捕捉异常并打印在JUnit的控制台。所以只需要我们抛出异常就可以了。
package com.example.exam; import android.test.AndroidTestCase; public class Test extends AndroidTestCase { public void myFirstText() throws Exception{ int i=2+2; } }
点击window->show view选择outline 和java中的JUnit,查看JUnit蓝色条表示通过。
新的activity启动后,前一个activity就会停止,系统将其保存到一个历史栈中。返回时,顶层的activity就会被销毁,之前的activity就会重新显示在屏幕上。当然,如果系统内存不足,后台的activity就会被销毁。
androidmanifest中的intent-filter标签指定了初始启动的activity
Activity生命周期:由android系统管理
onCreate()
onStart()
onRestart()
onResume()
onPause()
onStop()
onDestroy()
package com.example.ex; import android.os.Bundle; import android.util.Log; import android.app.Activity; public class MainActivity extends Activity { private static final String LIFETAG="Aclifecycle"; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onStart(){ super.onStart(); Log.d(LIFETAG,"onstart method is executed"); } @Override protected void onResume(){ super.onResume(); Log.d(LIFETAG,"onresume method is executed"); } @Override protected void onRestart(){ super.onRestart(); Log.d(LIFETAG,"onrestart method is executed"); } @Override protected void onPause(){ super.onPause(); Log.d(LIFETAG,"onpause method is executed"); } @Override protected void onStop(){ super.onStop(); Log.d(LIFETAG,"onstop method is executed"); } @Override protected void onDestroy(){ super.onDestroy(); Log.d(LIFETAG,"ondestroy method is executed"); } }
启动程序:
执行3个生命周期方法:
onCreate() activity第一次创建时调用
onStart() activity对用户即将可见时调用
onResume() activity即将与用户交互时调用 磁石activity进入栈顶
在这之后总是调用onpause()方法
按下模拟器的拨号按钮,activity失去焦点,观察logcat中信息:
onPause()在activity启动另一个activity时调用。下一个activity必须等待这个方法返回后再启动。
onStop()在一个新的activity启动,其他activity被切换到前台,当前activity被销毁时都会调用。
点击返回键:
当activity从stopped状态启动时调用OnRestart()方法,后面总是调用onstart()方法。
再次按返回键,关闭activity:
很多时候,在关闭一个activity后,用户期望再次返回到哪个activity,它仍保持离开时的样子,这时候就需要考虑如何保存activity。
为了获取activity被杀死前的状态,应该为activity实现onSaveInstanceState()方法。它在activity被系统销毁前调用。
用户造成的销毁(如按下返回键),不会调用。
最好用onpause()方法来保存在停止与用户交互前更改过的数据。
总结:
oncreat() ondestroy()创建和销毁
onstart() onstop() 可见和不可见
onresume() onpause()焦点和无焦点
onrestart() 在onstop()以后却没有执行ondestroy()方法时调用。如调用了ondestroy则调用onCreat。