当前位置: 编程技术>移动开发
本页文章导读:
▪多线程了解,线程 多线程理解,线程
最近在玩安卓,要提到多线程, 总感觉那东西有点不明白,总是有那些停止,暂停,销毁,启动什么的,总是执行那些程序,先后,快慢,说实话,不知道那是什么意思的, 个人.........
▪ 标题栏网络连接图标的展示和取消 标题栏网络连接图标的显示和取消
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
......
▪ 起动或安装相应的应用的方法 启动或安装相应的应用的方法
有时候一个应用需要启动另外一个应用来完成操作,比如在某些应用中打开闹钟,相机,日历等等。启动或安装相应的应用的方法:Step1:判断是否安装目标.........
[1]多线程了解,线程
来源: 互联网 发布时间: 2014-02-18
多线程理解,线程
最近在玩安卓,要提到多线程, 总感觉那东西有点不明白,总是有那些停止,暂停,销毁,启动什么的,总是执行那些程序,先后,快慢,说实话,不知道那是什么意思的,
个人感觉多线程并不是什么情况下都适用的,一般用在定时功能,用得最好的只有播放器,听音乐的这些软件了, 有快进,有慢,有暂停,关闭这些都是多线程的,多线程的意义不在于共同执行一个任务或者是一段代码什么的, 他的意义在于,控制多个线程来完成一个任务,有选择的来完成,
不知道理解错了没有,也就是自己的理解吧,确实不太明白
贴出多线程例子,看意思代码分析
package com.pu.gc;
public class TestThread{
public static void main(String[] args) {
//创建饼的实例
Bing b = new Bing();
//创建同步的吃饼和烙饼实例
GongNeng g = new GongNeng(b);
//创建线程两个消费者两个生产者
ChuShi c1 = new ChuShi(g);
ChuShi c2 = new ChuShi(g);
XiaoFei x1 = new XiaoFei(g);
XiaoFei x2 = new XiaoFei(g);
//启动线程
c1.start();
c2.start();
x1.start();
x2.start();
}
}
class ChuShi extends Thread{
private GongNeng g;
public ChuShi(GongNeng g){
this.g = g;
}
public void run(){
for(;;){
g.lao();
}
}
}
class XiaoFei extends Thread{
private GongNeng g;
public XiaoFei(GongNeng g){
this.g = g;
}
public void run(){
for(;;){
g.chi();
}
}
}
class GongNeng {
private Bing b;
public GongNeng(Bing b){
this.b = b;
}
public synchronized void lao(){
if(b.getBing()<10){
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread()+
":厨师烙了一张饼,盘里还剩"+(b.getBing()+1)+"张饼");
b.setBing(b.getBing()+1);
}
}
public synchronized void chi(){
if(b.getBing()>0){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread()+
":消费者吃了一张饼,盘里还剩"+(b.getBing()-1)+"张饼");
b.setBing(b.getBing()-1);
}
}
}
class Bing {
private int bing = 10;
public int getBing() {
return bing;
}
public void setBing(int bing) {
this.bing = bing;
}
}
最近在玩安卓,要提到多线程, 总感觉那东西有点不明白,总是有那些停止,暂停,销毁,启动什么的,总是执行那些程序,先后,快慢,说实话,不知道那是什么意思的,
个人感觉多线程并不是什么情况下都适用的,一般用在定时功能,用得最好的只有播放器,听音乐的这些软件了, 有快进,有慢,有暂停,关闭这些都是多线程的,多线程的意义不在于共同执行一个任务或者是一段代码什么的, 他的意义在于,控制多个线程来完成一个任务,有选择的来完成,
不知道理解错了没有,也就是自己的理解吧,确实不太明白
贴出多线程例子,看意思代码分析
package com.pu.gc;
public class TestThread{
public static void main(String[] args) {
//创建饼的实例
Bing b = new Bing();
//创建同步的吃饼和烙饼实例
GongNeng g = new GongNeng(b);
//创建线程两个消费者两个生产者
ChuShi c1 = new ChuShi(g);
ChuShi c2 = new ChuShi(g);
XiaoFei x1 = new XiaoFei(g);
XiaoFei x2 = new XiaoFei(g);
//启动线程
c1.start();
c2.start();
x1.start();
x2.start();
}
}
class ChuShi extends Thread{
private GongNeng g;
public ChuShi(GongNeng g){
this.g = g;
}
public void run(){
for(;;){
g.lao();
}
}
}
class XiaoFei extends Thread{
private GongNeng g;
public XiaoFei(GongNeng g){
this.g = g;
}
public void run(){
for(;;){
g.chi();
}
}
}
class GongNeng {
private Bing b;
public GongNeng(Bing b){
this.b = b;
}
public synchronized void lao(){
if(b.getBing()<10){
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(Thread.currentThread()+
":厨师烙了一张饼,盘里还剩"+(b.getBing()+1)+"张饼");
b.setBing(b.getBing()+1);
}
}
public synchronized void chi(){
if(b.getBing()>0){
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread()+
":消费者吃了一张饼,盘里还剩"+(b.getBing()-1)+"张饼");
b.setBing(b.getBing()-1);
}
}
}
class Bing {
private int bing = 10;
public int getBing() {
return bing;
}
public void setBing(int bing) {
this.bing = bing;
}
}
[2] 标题栏网络连接图标的展示和取消
来源: 互联网 发布时间: 2014-02-18
标题栏网络连接图标的显示和取消
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
[3] 起动或安装相应的应用的方法
来源: 互联网 发布时间: 2014-02-18
启动或安装相应的应用的方法
有时候一个应用需要启动另外一个应用来完成操作,比如在某些应用中打开闹钟,相机,日历等等。
启动或安装相应的应用的方法:
Step1:判断是否安装目标应用。只要知道目标应用的安装包名就可以通过判断"/data/data/packagename"是否存在来实现。
/**
* 判断是否安装目标应用
* @param packageName 目标应用安装后的包名
* @return 是否已安装目标应用
* @author zuolongsnail
*/
private boolean isInstallByread(String packageName) {
return new File("/data/data/" + packageName).exists();
}
Step2:目标应用已安装则启动,否则先安装。
/**
* 先判断是否安装,已安装则启动目标应用程序,否则先安装
* @param packageName 目标应用安装后的包名
* @param appPath 目标应用apk安装文件所在的路径
* @author zuolongsnail
*/
private void launchApp(String packageName, String appPath) {
// 启动目标应用
if (isInstallByread(packageName)) {
// 获取目标应用安装包的Intent
Intent intent = getPackageManager().getLaunchIntentForPackage(
packageName);
startActivity(intent);
}
// 安装目标应用
else {
Intent intent = new Intent();
// 设置目标应用安装包路径
intent.setDataAndType(Uri.fromFile(new File(appPath)),
"application/vnd.android.package-archive");
startActivity(intent);
}
}
有时候一个应用需要启动另外一个应用来完成操作,比如在某些应用中打开闹钟,相机,日历等等。
启动或安装相应的应用的方法:
Step1:判断是否安装目标应用。只要知道目标应用的安装包名就可以通过判断"/data/data/packagename"是否存在来实现。
/**
* 判断是否安装目标应用
* @param packageName 目标应用安装后的包名
* @return 是否已安装目标应用
* @author zuolongsnail
*/
private boolean isInstallByread(String packageName) {
return new File("/data/data/" + packageName).exists();
}
Step2:目标应用已安装则启动,否则先安装。
/**
* 先判断是否安装,已安装则启动目标应用程序,否则先安装
* @param packageName 目标应用安装后的包名
* @param appPath 目标应用apk安装文件所在的路径
* @author zuolongsnail
*/
private void launchApp(String packageName, String appPath) {
// 启动目标应用
if (isInstallByread(packageName)) {
// 获取目标应用安装包的Intent
Intent intent = getPackageManager().getLaunchIntentForPackage(
packageName);
startActivity(intent);
}
// 安装目标应用
else {
Intent intent = new Intent();
// 设置目标应用安装包路径
intent.setDataAndType(Uri.fromFile(new File(appPath)),
"application/vnd.android.package-archive");
startActivity(intent);
}
}
最新技术文章: